android自带的系统应用源码

合集下载

黑马程序员android开发笔记及源码

黑马程序员android开发笔记及源码

01、什么是3G02、android系统简介03、android背景介绍04、android的framewor简介05、两种虚拟机的比较06、sdk的下载以及简介07、创建android模拟器08、ddms简介09、platform-tools的简介及常见adb指令10、android项目的目录结构11、android下apk安装的过程12、常见的adb指令介绍13、创建模拟器遇到的常见错误14、电话拨号器15、点击事件的四种写法16、短信发送器17、相对布局&单位介绍18、现形布局&布局的组合19、表格布局&绝对布局20、帧布局21、测试相关概念22、android下junit测试框架配置23、logcat简介24、保存文件到手机内存25、android下文件访问的权限26、保存文件到SD卡中27、分析setting源代码获取SD卡大小28、_sharePreference入门29、xml文件的序列化30、采用pull解析xml文件31、采用断电调试的方法观察pull解析的的流程32、android下创建一个sqllite数据库33、sql语句实现数据库的增删改查34、系统api实现数据库的增删改查&Sqlite3工具的使用35、数据库的事物36、listView入门37、采用layoutInflater打气筒创建一个view对象38、采用数据适配器ArryAdapter39、常用数据适配器simpleAdapter40、数据适配器总结41、内容提供者简介42、内容提供者的实现43、短信的备份44、插入一条记录到系统短信应用45、内容观察者46、获取系统的联系人信息47、保存联系人到系统通讯录48、读取联系人的一个小细节49、网络图片查看器50、anr产生的原理&如何避免51、android消息机制入门52、网络html查看器53、字符乱码问题的处理54、采用get方式提交数据到服务器55、采用post方式提交数据到服务器56、提交数据到服务器中文乱码问题的处理57、采用httpclient提交数据到服务器58、异步http框架简介&实现原理59、异步http框架提交数据到服务器60、上传文件到服务器61、smartimageview&常见开源代码62、多线程下载的原理63、多线程断点下载的原理64、多线程java代码移植到android65、多线程下载文本页面的更新66、显示意图激活另一个activity67、隐式意图激活另一个activity68、隐式意图的配置69、隐式意图和显示意图的使用场景70、在不同activity之间数据传递71、activity的声明周期72、activity的启动模式73、activity横竖屏切换的声明周期74、开启新的activity获取他的返回值75、请求码和结果码的作用76、利用广播实现ip拨号77、短信窃听器78、自定义广播时间&发送自定义广播&广播接受者优先级79、采用服务执行长期后台操作80、采用服务窃听电话&服务的声明周期81、android进程优先级&为什么使用服务82、绑定方式开启服务&调用服务的方法83、服务的声明周期(混合开启84、采用aidl绑定远程服务85、代码注册广播接受者&利用广播调用服务的办法86、加载大图片到内存87、获取图片exif信息88、从gallery获取图片89、图片画画板90、扒开美女衣服91、图片的缩放92、图片的旋转93、图片的平移&镜面&倒影效果94、图片的合成95、图片的颜色处理96、多媒体播放api简介97、人脸识别98、mediaplayer的生命周期99、soundpoo简介100、sufaceview的生命周期101、播放在线视频102、视频播放器进度的处理103、调用系统照相机拍照和录像104、采用camera拍照105、常见对话框106、notification入门107、菜单108、android下的样式109、android下的主题110、代码编写ui111、html创建ui112、帧动画113、代码创建创建的tween动画114、xml文件定义动画115、传感器简介116、117、杀死进程118、apk的安装119、应用程序的反编译120、动态创建fragment121、用fragment创建一个选项卡122、fragment的向下兼容性123、fragment的生命周期124、fragment之间的通讯125、应用程序国际化04、android的framewor简介Wap:wait and playWireless Makeup Language(WML)精简的html语言Applications:android自带的基本上层应用Aplication framework:应用程序框架Librarics:Linux lernel:05、两种虚拟机的比较编译后文件格式:jvm:.java->.class->.jardalvik vm:.java->.dex->.odex基于的架构:jvm:基于栈的架构dalvik vm:基于寄存器的架构Cpu直接访问寄存器因此dalvik虚拟机的效率比jvm高06、sdk的下载以及简介->获取sdk工具包(sdk:standard develope kits)->ADT(android develop tools,实际上是eclipse的插件)SDK具体内容Android->SDK Plateform:开发时使用到的jar包->Samples for sdk:->ARM EABI V7a System Image:模拟器运行时的镜像->Intel n86 Aton System:模拟器运行时的镜像->MIPS System Image:模拟器运行时的镜像->google APIs:google提供的jar包,可以直接使用google提供的一些API ->source for android SDK:SDK全部的源代码Extrals:->tools:开发的工具->support library:实现高版本的android向下的兼容->google Admed Ads SDK:gongle提供的广告插件->Analyties App Irackiong SDK:应用的用户分析->cloud message:云消息->gongle play service:收费服务->google USB Driver:真实的设备驱动开发时:基于4.0,兼容2.2、2.3.307、创建android模拟器avd:android virture developerVGA:480*640(电视的标准分辨率)QVGA:240*320(四分之一)HVGA:320*480(一半)WVGA:480*800(width)FWVGA:480*854(更宽)08、ddms简介ddms:模拟器不支持中文,因此发送中文会显示不出来09、platform-tools的简介及常见adb指令Android调试桥:内部实现就是socket让两个系统之间实现数据交互->reset adb:模拟器找不到时候可以重启->adb device:列出所有的连接的设备->adb kill-server:杀死adb调试桥->adb start-server 启动adb调试桥dx.bat:将.class文件打包10、android项目的目录结构一:SDK的目录结构->Samples->Api demo:根据API demo(模拟器上面可以看见)的效果可以在sample中看见相应的代码->Source:jar包所有的sdk源代码都在这个文件夹里->SystemImage:系统镜像->temp:下载更新临时存储的文件夹,一般是空的->tools:emulater.ext 不同版本的模拟器二:New Android Application->theme:留给以后作为扩展,现在并没有太大的作用->target SDK:一般选择高版本,因为高版本对下兼容->mark project as a library:一般不选择,意思是将这个项目提供一个jar包供别人使用三:文件夹目录.setting:设置目录assets:资产目录,存放一些文件,这些文件会被原封不动打包到应用程序的apk中bin:gen:自动生成的目录->builderConfig.java:生成的配置信息->R.java:Android 4.1.2->android.jar开发环境,jar包可以在properties中修改,jar包就是SDK011、Android下apk的安装过程一、Android安装过程分析:->setContentView:甚至view的对象,把里面的xml文件加载到->在project中选择build automaticly会自动把文件生成字节码文件,.class $代表的class文件生成的是内部类->dex.bat文件会把.class文件生成.dex文件->apk压缩文件解压内部内容->META-INF:应用程序的签名eclipse的调试签名文件->res:资源文件->classes.dex:class文件->resources.arsc:资源ID映射->android软件安装的过程:->拷贝xxx.apk带/data/app/xxx-1.apk->在/data/data目录下创建一个文件夹,文件夹名称当前应用程序的报名012、常见adb指令前提:->设备连接上电脑而且驱动安装正常,如果安装不正常的话,会有黄色的问号显示;->设备上打开USB调试;指令:->adb device(如果启动发现这个程序没有安装会自动安装)->adb kill-server->adb start-server->adb uninstall <包名>->adb -s emulator-5554 install c:\\users\\administrator\\hello.apk如果有多个设备的话,如果不指定安装的是哪个设备程序会报错->adb push haha.prop /sdcard/haha.txt 将文件移到(360管家,豌豆荚之类的软件他们也是用的adb指令,倘若电脑上装这些软件的话,会因为两个adb指令抢端口号而挂掉)(adb版本之间兼容不是很好,经常报错可以考虑下版本的问题)->adb shell:远程连接到了android的linux终端ls:显示文件夹ps:显示正在运行的程序ping:网络连通性013、创建模拟器遇到的常见错误->路径最好不要有中文:->应用安装不上,或者安装模拟器的时候开启一个新的模拟器:可能是模拟器的资源被占用,模拟器在运行的时候其实占用着硬盘上面的一个文件,这个文件位于工作空间.android/avd/iphone.avd 里面会有镜像文件,当一个模拟器开启起来了,就给你创建一个文件夹.knock的文件夹,代表着这个模拟器被锁定了,如果把模拟器关掉,就没有程序占据这几个镜像资源了,那么这几个程序就会被自动删除。

Android源码——Logger日志系统

Android源码——Logger日志系统

Android源码——Logger⽇志系统Android的Logger⽇志系统是基于内核中的Logger⽇志驱动程序实现的。

⽇志保存在内核空间中缓冲区保存⽇志分类⽅法:⽇志的类型 + ⽇志的输出量⽇志类型: main sysytem radio events以上四种⽇志分别通过以下四个设备⽂件来访问:/dev/log/main/dev/log/system.../radio.../eventsAndroid系统在应⽤中提供了三个 Java接⼝,往Logger⽇志驱动程序中写⼊⽇志,分别对应main, system, event: android.util.Logandroid.util.Slogandroid.util.EventLogLogger⽇志驱动程序基础数据结构Logger主要⽤到了logger_entry logger_log logger_reader三个结构体。

struct logger_entry {__u16 len; /* length of the payload */__u16 hdr_size; /* sizeof(struct logger_entry_v2) */__s32 pid; /* generating process's pid */__s32 tid; /* generating process's tid */__s32 sec; /* seconds since Epoch */__s32 nsec; /* nanoseconds */uid_t euid; /* effective UID of logger */char msg[0]; /* the entry's payload */};------------------------------------------------------------------struct logger_log {unsigned char *buffer; /* the ring buffer itself 保存内容*/struct miscdevice misc; /* misc device representing the log ⽇志设备*/wait_queue_head_t wq; /* wait queue for readers */struct list_head readers; /* this log's readers */struct mutex mutex; /* mutex protecting buffer */size_t w_off; /* current write head offset */size_t head; /* new readers start here */size_t size; /* size of the log */}-------------------------------------------------------------------------------------------------------struct logger_reader {struct logger_log *log; /* associated log */struct list_head list; /* entry in logger_log's list */size_t r_off; /* current read head offset */bool r_all; /* reader can read all entries */int r_ver; /* reader ABI version */};⽇志设备的初始化过程⽇志设备的初始化:⼊⼝函数:logger_init⽇志设备的打开,读取,写⼊,分别对应:logger_open, logger_read, logger_aio_write.初始化过程:注册⽇志设备 kernel/goldfish/drivers/staging/android/logger.c init_log将⽇志设备注册到系统中: init_log中调⽤misc_register函数在misc_register中调⽤device_create函数注册到系统中在设备的/dev⽬录下看到/dev/log/main, .../events, .../radio⽇志设备⽂件的打开过程⽇志驱动程序的读写之前,都需要先打开⽇志设备⽂件。

Android_4.2_源码下载和编译环境安装及Android_4.2_源码编译

Android_4.2_源码下载和编译环境安装及Android_4.2_源码编译

Android 4.2源码的下载和编译环境的安装及源码的编译Google于2012.11.14发布了Android4.2的源码,下面把本人在ubuntu10.04 的64位系统上下载源码,和编译源码做个记录备份,也供有需要的人参考,若是在下载编译安装Android源代码遇到问题,可加QQ群交流: 217706590,难免有错,敬请见谅,还忘勿吝啬指出。

源代码下载、编译环境安装、源代码编译和运行模拟器的可能出现的一些错误在本文最后一章节,若出现类似错误,可以参考。

1、源码的下载源代码的下载,首先需要安装以下软件:curl 和git-core1.1安装curl:在终端中执行:sudo apt-get install curl1.2安装git-core1.2.1在用户目录下新建bin文件在终端中执行:mkdir ~/bin将~/bin添加环境变量,作用是:要将git软件下载安装在此目录,在别的目录运行可能会找不到此软件,所以要添加到环境变量中在终端中执行:PA TH=~/bin:$PATH1.2.2安装git-core在终端中执行:curl https:///dl/googlesource/git-repo/repo§> ~/bin/repo给repo执行权限:chmod a+x ~/bin/repo1.3 下载源代码1.3.1进入要源代码将要保存的目录如我的源代码保存在:、/opt/android/src在终端中执行:cd /opt/android/src 进入到src目录中1.3.2 获取repo最新的配置repo init -u https:///platform/manifest§若是执行错误则用以下命令:~/bin/repo init -u https:///platform/manifest§1.3.3 下载源代码对于下载不同版本的android,指定一个manifest分支(即只指明android对应的版本),使用-b参数(即下载某个版本的源代码),如:对于4.2的版本,将命令修改为repo init -u https:///platform/manifest§ -b android-4.2_r1若是执行错误则用以下命令:~/bin/repo init -u https:///platform/manifest§ -b android-4.2_r1 执行以上命令后,会在/opt/android/src目录中生成一个.repo的目录,此目录保存了将要下载的源代码的相关信息同步获取源码#~/bin/repo sync如果中间出现中断,这个很正常,你可以再次输入~/bin/repo sync 命令来进行下载。

深入理解Android5源代码

深入理解Android5源代码

深⼊理解Android5源代码深⼊理解Android 5 源代码1 Android系统介绍1.1 Android系统成功的秘诀1.1.1 获取了业界的⼴泛⽀持1.1.2 研发阵容强⼤1.1.3 为开发⼈员“精⼼定制”1.1.4 开源1.2 剖析Android系统架构1.2.1 底层操作系统层(OS)1.2.2 各种库(Libraries)和Android运⾏环境(RunTime)1.2.3 ApplicationFramework(应⽤程序框架)1.2.4 顶层应⽤程序(Application)1.3 五⼤组件1.3.1 Activity界⾯1.3.2 Intent和IntentFilters切换1.3.3 Service(服务)1.3.4 BroadcastReceiver发送⼴播1.3.5 ⽤ContentProvider存储数据1.4 进程和线程1.4.1 什么是进程1.4.2 什么是线程2 获取并编译Android源代码2.1 获取Android源代码2.1.1 在Linux系统中获取Android源代码2.1.2 在Windows平台获取Android源代码2.2 分析Android源代码结构2.2.1 总体结构2.2.2 应⽤程序部分2.2.3 应⽤程序框架部分2.2.4 系统服务部分2.2.5 系统程序库部分2.2.6 硬件抽象层部分2.3 Android源代码提供的接⼝2.3.1 暴露接⼝和隐藏接⼝2.3.2 调⽤隐藏接⼝2.4 编译源代码2.4.1 搭建编译环境2.4.2 在模拟器中运⾏2.5 编译源代码⽣成SDK3 分析Java Native Interface系统3.1 JNI基础3.1.1 JNI的功能结构3.1.2 JNI的调⽤层次3.1.3 分析JNI的本质3.2 分析MediaScanner3.2.1 分析Java层3.2.2 分析JNI层3.2.3 分析Native(本地)层3.3 分析Camera系统的JNI3.3.1 Java层预览接⼝3.3.2 注册预览的JNI函数3.3.3 C/C++层的预览函数4 分析HAL系统4.1 HAL基础4.1.1 推出HAL的背景4.1.2 HAL的基本结构4.2 分析HAL module架构4.2.1 hw_module_t4.2.2 结构hw_module_methods_t的定义4.2.3 hw_device_t结构4.3 分析⽂件hardware.c4.3.1 寻找动态链接库的地址4.3.2 数组variant_keys4.3.3 载⼊相应的库4.3.4 获得hw_module_t结构体4.4 分析硬件抽象层的加载过程4.5 分析硬件访问服务4.5.1 定义硬件访问服务接⼝4.5.2 具体实现4.6 分析Android官⽅实例4.6.1 获取实例⼯程源代码4.6.2 直接调⽤Service⽅法的实现代码4.6.3 通过Manager调⽤Service的实现代码4.7 HAL和系统移植4.7.1 移植各个Android部件的⽅式4.7.2 设置设备权限4.7.3 init.rc初始化4.7.4 ⽂件系统的属性5 分析IPC通信机制5.1 Binder机制概述5.2 分析Binder驱动程序5.2.1 分析数据结构5.2.2 分析设备初始化5.2.3 打开Binder设备⽂件5.2.4 内存映射5.2.5 释放物理页⾯5.2.6 分配内核缓冲区5.2.7 释放内核缓冲区5.2.8 查询内核缓冲区5.3 Binder封装库5.3.1 类BBinder5.3.2 类BpRefBase5.3.3 类IPCThreadState5.4 初始化Java层Binder框架5.5 分析MediaServer的通信机制5.5.1 MediaServer的⼊⼝函数5.5.2 ProcessState5.5.3 defaultServiceManager5.5.4 注册MediaPlayerService5.5.5 分析StartThread Pool和join Thread Pool6 分析Binder对象和Java接⼝6.1 分析实体对象(binder_node)6.2 分析本地对象(BBinder)6.3 分析引⽤对象(binder_ref)6.4 分析代理对象(BpBinder)6.5 分析Java接⼝6.5.1 获取Service Manager6.5.2 分析ActivityManagerService的Java层7 分析ServiceManager和MessageQueue 7.1 分析ServiceManager7.1.1 分析主⼊⼝函数7.1.2 打开Binder设备⽂件7.1.3 注册处理7.1.4 创建Binder实体对象7.1.5 尽职的循环7.1.6 将信息注册到ServiceManager7.1.7 分析MediaPlayerService和Client7.2 获得Service Manager接⼝7.3 分析MessageQueue7.3.1 创建MessageQueue7.3.2 提取消息7.3.3 分析函数nativePollOnce8 init进程和Zygote进程8.1 分析init进程8.1.1 分析⼊⼝函数8.1.2 分析配置⽂件8.1.3 分析Service8.1.4 解析on字段的内容8.1.5 init控制Service8.1.6 控制属性服务8.2 分析Zygote(孕育)进程8.2.1 Zygote基础8.2.2 分析Zygote的启动过程9 System进程和应⽤程序进程9.1 分析System进程9.1.1 启动System进程前的准备⼯作9.1.2 分析SystemServer9.1.3 分析EntropyService9.1.4 分析DropBoxManagerService9.1.5 分析DiskStatsService9.1.6 分析DeviceStorageManagerService(监测系统内存存储空间的状态)9.1.7 分析SamplingProfilerService9.2 分析应⽤程序进程9.2.1 创建应⽤程序9.2.2 启动线程池9.2.3 创建信息循环10 分析Activity组件10.1 Activity基础10.1.1 Activity状态10.1.2 剖析Activity中的主要函数10.2 分析Activity的启动源代码10.2.1 Launcher启动应⽤程序10.2.2 返回ActivityManagerService的远程接⼝10.2.3 解析intent的内容10.2.4 分析检查机制10.2.5 执⾏Activity组件的操作10.2.6 将Launcher推⼊Paused状态10.2.7 处理消息10.2.8 暂停完毕10.2.9 建⽴双向连接10.2.10 启动新的Activity10.2.11 通知机制10.2.12 发送消息11 应⽤程序管理服务——PackageManagerService分析11.1 PackageManagerService概述11.2 系统进程启动11.3 开始运⾏11.4 扫描APK⽂件11.5 解析并安装⽂件11.6 启动系统默认Home应⽤程序Launcher11.6.1 设置系统进程11.6.2 启动Home应⽤程序11.6.3 启动uncher11.6.4 加载应⽤程序11.6.5 获得Activity12 Content Provider存储机制12.1 Content Provider基础12.1.1 ContentProvider在应⽤程序中的架构12.1.2 ContentProvider的常⽤接⼝12.2 启动Content Provider12.2.1 获得对象接⼝12.2.2 存在校验12.2.3 启动Android应⽤程序12.2.4 根据进程启动Content Provider 12.2.5 处理消息12.2.6 具体启动12.3 Content Provider数据共享12.3.1 获取接⼝12.3.2 创建CursorWindow对象12.3.3 数据传递12.3.4 处理进程通信的请求12.3.5 数据操作13 分析⼴播机制源代码13.1 Broadcast基础13.2 发送⼴播信息13.2.1 intent描述指⽰13.2.2 传递⼴播信息13.2.3 封装传递13.2.4 处理发送请求13.2.5 查找⼴播接收者13.2.6 处理⼴播信息13.2.7 检查权限13.2.8 处理的进程通信请求13.3 分析BroadCastReceiver13.3.1 MainActivity的调⽤13.3.2 注册⼴播接收者13.3.3 获取接⼝对象13.3.4 处理进程间的通信请求14 分析电源管理系统14.1 Power Management架构基础14.2 分析Framework层14.2.1 ⽂件PowerManager.java14.2.2 提供PowerManager功能14.3 JNI层架构分析14.3.1 定义了两层之间的接⼝函数14.3.2 与Linux Kernel层进⾏交互14.4 Kernel(内核)层架构分析14.4.1 ⽂件power.c14.4.2 ⽂件earlysuspend.c14.4.3 ⽂件wakelock.c14.4.4 ⽂件resume.c14.4.5 ⽂件suspend.c14.4.6 ⽂件main.c14.4.7 proc⽂件14.5 wakelock和early_suspend14.5.1 wakelock的原理14.5.2 early_suspend的原理14.5.3 Android休眠14.5.4 Android唤醒14.6 Battery电池系统架构和管理14.6.1 实现驱动程序14.6.2 实现JNI本地代码14.6.3 Java层代码14.6.4 实现Uevent部分14.7 JobScheduler节能调度机制14.7.1 JobScheduler机制的推出背景14.7.2 JobScheduler的实现14.7.3 实现操作调度14.7.4 封装调度任务15 分析WindowManagerService系统15.1 WindowManagerService基础15.2 计算Activity窗⼝的⼤⼩15.2.1 实现View遍历15.2.2 函数relayoutWindow15.2.3 函数relayoutWindow15.2.4 拦截消息的处理类15.2.5 判断是否计算过16 分析电话系统16.1 Android电话系统详解16.1.1 电话系统简介16.1.2 电话系统结构16.1.3 驱动程序介绍16.1.4 RIL接⼝16.1.5 分析电话系统的实现流程16.2 电话系统中的⾳频模块16.2.1 ⾳频系统结构16.2.2 分析⾳频系统的层次16.3 分析拨号流程16.3.1 拨号界⾯16.3.2 实现Phone应⽤16.3.3 Call通话控制16.3.4 静态⽅法调⽤16.3.5 通话管理16.3.6 dial拨号16.3.7 状态跟踪16.3.8 RIL消息“出/⼊”⼝16.3.9 显⽰通话主界⾯17 分析短信系统17.1 短信系统的主界⾯17.2 发送普通短信17.3 发送彩信17.4 接收短信17.4.1 Java应⽤层的接收流程17.4.2 Framework层的处理过程18 Sensor传感器系统详解18.1 Android传感器系统概述18.2 Java层详解18.3 Frameworks层详解18.3.1 监听传感器的变化18.3.2 注册监听18.4 JNI层详解18.4.1 实现Native(本地)函数18.4.2 处理客户端数据18.4.3 处理服务端数据18.4.4 封装HAL层的代码18.4.5 处理消息队列18.5 HAL层详解19 分析SEAndroid系统19.1 SEAndroid概述19.1.1 内核空间19.1.2 ⽤户空间19.2 ⽂件安全上下⽂19.2.1 设置打包在ROM⾥⾯的⽂件的安全上下⽂19.2.2 设置虚拟⽂件系统的安全上下⽂19.2.3 设置应⽤程序数据⽂件的安全上下⽂19.3 进程安全上下⽂19.3.1 为独⽴进程静态地设置安全上下⽂19.3.2 为应⽤程序进程设置安全上下⽂20 分析ART系统20.1 对⽐Dalvik VM和ART20.2 启动ART20.2.1 运⾏app_process进程20.2.2 准备启动20.2.3 创建运⾏实例20.2.4 注册本地JNI函数20.2.5 启动守护进程20.2.6 解析参数20.2.7 初始化类、⽅法和域20.3 分析主函数main20.4 查找⽬标类20.4.1 函数LookupClass()20.4.2 函数DefineClass()20.4.3 函数InsertClass()20.4.4 函数LinkClass()20.5 类操作20.6 实现托管操作20.7 加载OAT⽂件20.7.1 产⽣OAT20.7.2 创建ART虚拟机20.7.3 解析启动参数并创建堆20.7.4 ⽣成指定⽬录⽂件20.7.5 加载OAT⽂件20.7.6 解析字段思维导图防⽌博客图床图⽚失效,防⽌图⽚源站外链:思维导图在线编辑链接:。

自己动手编译Android(LineageOS)源码

自己动手编译Android(LineageOS)源码

⾃⼰动⼿编译Android(LineageOS)源码⼀、编译LineageOS源码准备设备:⼩⽶ MIX2设备代号:chironAndroid版本:9.0PC配置:系统:Ubuntu18.04⾄少12G RAM⾄少200GB 剩余硬盘空间良好的⽹络环境1.下载并解压SDKsdk中包含fastboot和adb下载wget https:///android/repository/platform-tools-latest-linux.zip解压unzip platform-tools-latest-linux.zip -d ~添加到环境变量gedit ~/.profile输⼊:# add Android SDK platform tools to pathif [ -d "$HOME/platform-tools" ] ; thenPATH="$HOME/platform-tools:$PATH"fi保存。

使改动⽣效:source ~/.profile2.安装依赖安装必要库和⼯具sudo apt-get install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev安装openjdk-8-jdksudo apt install -y openjdk-8-jdk3.配置源创建repo存放⽬录mkdir -p ~/bin创建源码存放⽬录mkdir -p ~/android/lineage× 注:请确保该⽬录所在的磁盘有⾜够的空间(⾄少200G)安装repocurl https:///git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo将~/bin放⼊环境变量gedit ~/.profile加⼊:# set PATH so it includes user's private bin if it existsif [ -d "$HOME/bin" ] ; thenPATH="$HOME/bin:$PATH"fi使改动⽣效:source ~/.profile初始化repocd ~/android/lineagerepo init -u https:///LineageOS/android.git -b lineage-16.0× 注:这⾥的lineage-16.0是分⽀名,对应Android 9.0。

分享45个android实例源码

分享45个android实例源码

分享45个android实例源码,很好很强大/android-20978-1-1.htmlandriod闹钟源代码/android-20974-1-1.htmlandroid源码分享之指南针程序/android-20973-1-1.html重力感应的测试程序andriod源代码/android-20972-1-1.htmlandroid源码分享之时光日志个人日程管理/android-20969-1-1.htmlOpenGL的一个简单的例子/android-20968-1-1.html文件管理器-android源代码/android-20960-1-1.htmlAndroid Txt文本阅读器源码/android-20959-1-1.htmlAndroid远程登录含有loading登录效果~~完整代码和超级详细注释/android-20958-1-1.htmlAndroid 手电筒源码/android-20957-1-1.htmlAndroid操作数据库实例/android-20954-1-1.htmlandroid 画图程序/android-20953-1-1.htmlAndroid 天气预报加widget源码/android-20950-1-1.htmlAndroid 指南针程序/android-20949-1-1.htmlAndroid 个人记账程序源码Android游戏的心跳效果/android-20939-1-1.htmlAndroid PDF 阅读器源码/android-20858-1-1.htmlAndroid SqliteManager 源码/android-20857-1-1.htmlandroid 多点触控实例源码/android-20856-1-1.htmlAndroid 条码扫描程序源码/android-20855-1-1.htmlEditText插入QQ表情源码/android-20854-1-1.htmlAsyncTask进度条加载网站数据到ListView /android-20834-1-1.htmlandroid连接SQLite数据库-----增加改查+分页/android-20833-1-1.htmlAndroid 一个批量删除联系人的Demo/android-20832-1-1.htmlTXT 文本阅读器源码(android源码分享)/android-20827-1-1.htmlandroid 查询工具源代码/android-20824-1-1.htmlandroid进度条对话框Demo/android-20823-1-1.htmlAndroid实现渐显按钮的左右滑动效果/android-20752-1-1.html android天气预报源码Android 文件浏览器源码/android-20976-1-1.htmlandroid源码分享之私密通讯录源码/android-20975-1-1.htmlAndroid自定义泡泡效果源码/android-20956-1-1.htmlandroid 获取Gps信息的程序源码/android-20955-1-1.htmlandroid 超炫的图片浏览器/android-20952-1-1.htmlandroid 加载时闪烁点样式的启动画面/android-20951-1-1.html实现基于Android的英文电子词典/android-20948-1-1.html基于Android 的英文电子词典/android-20947-1-1.htmlandroid 源码之英语单词记忆程序源码/android-20936-1-1.htmlandorid 源码北京公交线路查询(离线)/android-20938-1-1.htmlAndroid 计算器源码/android-20935-1-1.html带文字的ProgressBar Demo源码/android-20831-1-1.htmlandroid自定义时钟(三种方法实现,秒针效果,详细注解)/android-20830-1-1.htmlAndroid 秒表源码分享/android-20829-1-1.htmlAndroid源代码定时情景模式切换/android-20828-1-1.htmlandroid 公交查询/android-20826-1-1.htmlandroid源码分享之带手势划动功能的日历源码/android-20825-1-1.html。

android浏览器源代码

android浏览器源代码

/bbs/home.php?mod=invite&id=62&c=apzrou /bbs/home.php?mod=invite&id=61&c=akkahk /bbs/home.php?mod=invite&id=60&c=zhhsor /bbs/home.php?mod=invite&id=59&c=4ukha8 /bbs/home.php?mod=invite&id=58&c=lgg60m /bbs/home.php?mod=invite&id=57&c=ymgm3m /bbs/home.php?mod=invite&id=56&c=n5zhht /bbs/home.php?mod=invite&id=55&c=huukbh /bbs/home.php?mod=invite&id=54&c=8yrc1c /bbs/home.php?mod=invite&id=53&c=stf115package com.explorer;import static com.mime.MIME.MIME_MapTable;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream; import java.util.ArrayList;import java.util.Arrays;import parator;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.app.AlertDialog;import android.app.Dialog;import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent;import .Uri;import android.os.Bundle;import android.os.Environment; import android.os.Handler;import android.os.Looper;import android.os.Message;import youtInflater; import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;import android.widget.Toast;import com.file.R;public class MainActivity extends Activity implements OnClickListener, OnItemClickListener, OnItemLongClickListener { private TextView currentDir;private Button btnC;private Button btnE;private ListView listView;private File rootDir;private File copyPath;private String flag;private String startFilePath;private String desFilePath;private List<File> fileList = new ArrayList<File>();private ProgressDialog progressDialog;private int currentLen = 0;private long totaLength = 0;private Handler messageHandler;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);setContentView(yout.main);currentDir = (TextView) findViewById(R.id.currentDir);// fileName = (TextView) findViewById();btnC = (Button) findViewById(R.id.btnC);btnE = (Button) findViewById(R.id.btnE);btnC.setOnClickListener(this);btnE.setOnClickListener(this);listView = (ListView) findViewById(R.id.listView);listView.setOnItemClickListener(this);listView.setOnItemLongClickListener(this);//得到当前线程的Looper实例,由于当前线程是UI线程也可以通过Looper.getMainLooper()得到messageHandler = new MessageHandler(Looper.myLooper());if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { rootDir = Environment.getExternalStorageDirectory();} else {rootDir = Environment.getRootDirectory();}loadFiles(rootDir);}//自定义Handlerclass MessageHandler extends Handler {public MessageHandler(Looper looper) {super(looper);}@Overridepublic void handleMessage(Message msg) {loadFiles(new File(currentDir.getText().toString()));}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();inflater.inflate(R.menu.menu, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if (item.getItemId() == R.id.newFile) {LayoutInflater factory = LayoutInflater.from(MainActivity.this);final View view = factory.inflate(yout.rename, null);AlertDialog d = new AlertDialog.Builder(MainActivity.this).setCancelable(true).setMessage("文件夹名") .setView(view).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String dirName = ((EditText) view.findViewById(R.id.rename)).getText().toString();String newFile = currentDir.getText().toString() + "/" + dirName;if (new File(newFile).exists()) {Toast.makeText(MainActivity.this, "文件夹已存在", Toast.LENGTH_LONG).show();return;}File f = new File(currentDir.getText().toString(), dirName);f.mkdir();}}).create();d.show();} else if (item.getItemId() == R.id.about) {Dialog d = new AlertDialog.Builder(MainActivity.this).setTitle("文件浏览器1.0beta").setMessage("本程序由劲松Alex制作") .setPositiveButton("确定", null).create();d.show();} else if (item.getItemId() == R.id.exit) {MainActivity.this.finish();}return true;}/*** 加载当前文件夹列表* */public void loadFiles(File dir) {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();if (dir != null) {// 处理上级目录if (!dir.getAbsolutePath().equals(rootDir.getAbsolutePath())) {Map<String, Object> map = new HashMap<String, Object>();map.put("file", dir.getParentFile());map.put("name", "上一级目录");map.put("img", R.drawable.folder);list.add(map);}currentDir.setText(dir.getAbsolutePath());File[] files = dir.listFiles();sortFiles(files);if (files != null) {for (File f : files) {Map<String, Object> map = new HashMap<String, Object>();map.put("file", f);map.put("name", f.getName());map.put("img", f.isDirectory() ? R.drawable.folder: (f.getName().toLowerCase().endsWith(".zip") ? R.drawable.zip : R.drawable.text));list.add(map);}}} else {Toast.makeText(this, "目录不正确,请输入正确的目录!", Toast.LENGTH_LONG).show();}ListAdapter adapter = new SimpleAdapter(this, list, yout.item, new String[] { "name", "img" }, new int[] {, R.id.icon });// listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);listView.setAdapter(adapter);}/*** 排序文件列表* */private void sortFiles(File[] files) {Arrays.sort(files, new Comparator<File>() {public int compare(File file1, File file2) {if (file1.isDirectory() && file2.isDirectory())return 1;if (file2.isDirectory())return 1;return -1;}});}/*** 打开文件** @param file*/private void openFile(File file) {Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// 设置intent的Action属性intent.setAction(Intent.ACTION_VIEW);// 获取文件file的MIME类型String type = getMIMEType(file);// 设置intent的data和Type属性。

安卓系统软件代码

安卓系统软件代码

安卓手机到手以后,把不需要的程序删掉,没有root过的机器是没有办法删系统自带的程序的。

什么是root呢?其实root就好比是windows里面administrator的意思,也就是最高权限账户,root就是Android系统的最高权限账户,做了root操作以后就可以随心所欲的去系统内删除程序等工作了。

首先就是下载这个软件!(软件到网上可以下载到,“一键rootZ4root”软件,如果找不到,可以联系我,我发给你)下载并安装即可在手机里找到,打开软件后,选择第二个选择项目,再点OK,然后将手机的“USB调试”打开,(这个很重要,必须打开,如果找不到,也可以找我!因为机型不同,所以有出入!)然后再重新启动Z4程序,继续选择第二个选项,手机即将进行关机、重启,重启后,界面里面则可以看见一个骷髅图标(“权限管理”),点击,然后点击Z4程序,在跳出的白色选项中再点“允许”,即完成了所谓的root工作。

接下去用 R.E.管理器(网上有“R.E管理器”这个下载,没有也可以找我,我发你。

安装之后,点开,在选择“允许”,则也获得了管理最高权限)进入R.E程序,可看到左上角有什么读写之类的,点击一下旁边的白色框,改变模式即可!然后依次打开手机根目录的system/app/ 这里面看到的就是内置的软件程序,你就可以按照自己的需求去删除了,以下有个对应列表,供参考,注意的是,同一个软件有*.apk和*.ODEX 这2个都需要删除的。

等删除完以后,马上重启手机,然后再去手机的设置-应用程序-管理应用程序再清理下刚刚删除的程序!以下是app文件夹内文件的对应中文意思!供大家参考。

AlarmClock.apk 闹钟AudioEffect.apk 音频效果Browser.apk 浏览器Calculator.apk 计算器Calendar.apk 日历Calendarprovider.apk 日历数据存储Camera.apk 相机CoolDict.apk 词酷DiceBox.apk 酒吧骰子Email.apk 电子邮件FileManager.apk 文件管理器Firewall.apk 防火墙FMRadio.apk FM收音机FOTA.apk 系统更新(反正ROOT后也不能更新,不如删了)GlobalSearch.apk 搜索(删除后设置中的搜索项将无法进入,但不影响使用)GooglePinyinIme.apk 谷歌拼音HTMLViewer.apk HTML浏览器MagicSmokeWallpapers.apk 动态壁纸Mob.apk 手机营业厅MotoApnControlWidget.apk 手机上网控制MotoAppStore.apk 智件园MotoCal.apk 公司日历MotoGal.apk 公司名录Music.apk 音乐NaviTo.apk 途语导航NotesWidget.apk 记事帖插件PandaReader.apk 熊猫看书PimBackup.apk SD卡备份QuickOffice.apkSimManager.apk SIM管理器SlideShowWidget.apk 幻灯片插件SoundRecorder.apk 录音机Stk.apk SIM卡应用TightropeHero.apk 钢丝英雄TongHuaShun.apk 同花顺UCBrowser.apk UC浏览器VisualizationWallpapers.apk 动态壁纸WeatherWidget.apk 天气插件Wo.apk 沃3GWorldClockWidget.apk 世界时钟YouKu.apk 手机优酷注意以下程序不要轻易删除:Latin.apk和LatinIME.apk是英文输入法,删除后MOTO输入法不能切换到虚拟键盘LiveWallpapers.apk和LiveWallpapersPicker.apk若是删除则动态壁纸不能使用,当然不用动态壁纸尽可以一删了之MediaProvider.apk若是删除则手机会找不到所有的铃声,变成静音Pinyin.apk和Switcher.apk是MOTO输入法程序UserDictionaryProvider.apk删除后在虚拟键盘下用MOTO输入法输入英文会出错如有不懂,可以联系我!我的QQ:196167289。

安卓android网上订餐点餐菜系统源代码

安卓android网上订餐点餐菜系统源代码

private class loadAsyncTask extends AsyncTask<String, Integer, String> {@Overrideprotected void onPreExecute() {dialog = ProgressDialog.show(DishesListActivity.this, "提示", "获取中..");}@Overrideprotected String doInBackground(String... params) {String json = null;serverUrl= AppConstant.getUrl(getApplicationContext()) + "ServletService?Action=getdisheslist&msg="+ params[0];json = httpHelper.HttpRequest(serverUrl);return json;}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);dialog.dismiss();list = new ArrayList<dishes>();if (result != null && result.trim().length() > 0) {try {jsonArray = new JSONArray(result);for (int i = 0; i < jsonArray.length(); i++) {jsonObject = jsonArray.getJSONObject(i);dishes model = new dishes();model.setId(jsonObject.getInt("id"));model.setIntro(jsonObject.getString("intro"));model.setImg_url(jsonObject.getString("img_url"));model.setTitle(jsonObject.getString("title"));model.setPrice(jsonObject.getDouble("price"));list.add(model);}} catch (JSONException e) {e.printStackTrace();}} else {toastUtil.show("没有数据");}adapter = new DishesAdapter(DishesListActivity.this, list);listview1.setAdapter(adapter);}}private class loadAsyncTask extends AsyncTask<String, Integer, String> {@Overrideprotected void onPreExecute() {dialog = ProgressDialog.show(PlaceOrderActivity.this, "提示", "获取中,请稍后..");}@Overrideprotected String doInBackground(String... params) {String urlString = AppConstant.getUrl(getApplicationContext()) + "ServletService?Action=getOneRow";urlString = urlString + "&Table=seats";String json = httpHelper.HttpRequest(urlString);return json;}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);dialog.dismiss();if (result.trim().length() > 0) {try {jsonArray = new JSONArray(result);LinearLayout ll = null;for (int i = 0; i < jsonArray.length(); i++) {jsonObject = jsonArray.getJSONObject(i);if (i % 6 == 0) {ll = new LinearLayout(PlaceOrderActivity.this);ll.setOrientation(LinearLayout.HORIZONTAL);ll.setGravity(Gravity.CENTER);}final ImageView imageView = new ImageView(PlaceOrderActivity.this);imageView.setPadding(5, 5, 5, 5);imageView.setTag(jsonObject.getInt("id") + ","+ jsonObject.getInt("state") + ",0");if (jsonObject.getInt("state") == 0) { imageView.setImageResource(R.drawable.seat_unavailable);} else {imageView.setImageResource(R.drawable.seat_sel);}imageView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String tag = v.getTag().toString();String id = tag.split(",")[0];String state = tag.split(",")[1];// 是否被选择String sel = tag.split(",")[2];// 是否选中if ("1".equals(state)) {toastUtil.show("该座位已被选");} else {if ("1".equals(sel)) {imageView.setImageResource(R.drawable.seat_unavailable);imageView.setTag(id + ","+ state + "," + "0");hashMap.remove(Integer.valueOf(id));setSel();} else {imageView.setImageResource(R.drawable.seat_selected);imageView.setTag(id + ","+ state + "," + "1");hashMap.put(Integer.valueOf(id), Integer.valueOf(id));setSel();}}}});ll.addView(imageView);if (i % 6 == 0) {llSeat.addView(ll);}}} catch (JSONException e) {e.printStackTrace();}}}}private class loadAsyncTask extends AsyncTask<String, Integer, String> {@Overrideprotected void onPreExecute() {dialog = ProgressDialog.show(MyOrdersListActivity.this, "提示", "获取中..");}@Overrideprotected String doInBackground(String... params) {String json = null;serverUrl= AppConstant.getUrl(getApplicationContext()) + "ServletService?Action=getmyorderslist&userid="+ user.getId();json = httpHelper.HttpRequest(serverUrl);return json;}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);dialog.dismiss();list = new ArrayList<orders>();if (result != null && result.trim().length() > 0) {try {jsonArray = new JSONArray(result);for (int i = 0; i < jsonArray.length(); i++) {jsonObject = jsonArray.getJSONObject(i);orders model = new orders();model.setId(jsonObject.getInt("id"));model.setAmount(jsonObject.getDouble("amount"));model.setCreatetime(jsonObject.getString("createtime"));model.setSeat(jsonObject.getString("seat"));model.setPrice(jsonObject.getDouble("price"));model.setUsername(jsonObject.getString("title"));model.setImg_url(jsonObject.getString("img_url"));model.setStatus(jsonObject.getInt("status"));list.add(model);}} catch (JSONException e) {e.printStackTrace();}} else {toastUtil.show("没有数据");}adapter= new OrdersAdapter(MyOrdersListActivity.this, list);listview1.setAdapter(adapter);}}package com.mm.mealapp.activity;import org.json.JSONArray;import org.json.JSONException;import android.app.ProgressDialog;import android.content.Intent;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import com.miebo.utils.AsyncImageLoader;import com.miebo.utils.BaseActivity;/**** @author zlus*public class GoodDetailActivity extends BaseActivity {private int id = 0;private ImageView imageView1;private AsyncImageLoader asyncImageLoader;private String serverUrl;private TextView tvIntro;private Button btnTopTitleRight, btnTopTitleLeft;private monApplication application;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_gooddetail);application = (monApplication) getApplicationContext();findview();asyncImageLoader = new AsyncImageLoader(BitmapFactory.decodeResource(getResources(), R.drawable.pc_loading_fali));serverUrl = AppConstant.getRootUrl(this);if (getIntent() != null) {id = getIntent().getIntExtra("id", 0);new loadAsyncTask().execute(id + "");}}private void findview() {imageView1 = (ImageView) findViewById(R.id.imageView1);tvIntro = (TextView) findViewById(Intro);btnTopTitleRight = (Button) findViewById(R.id.btnTopTitleRight);btnTopTitleRight.setText("下单");btnTopTitleRight.setVisibility(View.VISIBLE);btnTopTitleRight.setOnClickListener(this);btnTopTitleLeft = (Button) findViewById(R.id.btnTopTitleLeft);btnTopTitleLeft.setVisibility(View.VISIBLE);btnTopTitleLeft.setOnClickListener(this);btnTopTitleLeft.setText("返回");}private class loadAsyncTask extends AsyncTask<String, Integer, String> {@Overrideprotected void onPreExecute() {dialog = ProgressDialog.show(GoodDetailActivity.this, "提示", "获取中,请稍后..");}@Overrideprotected String doInBackground(String... params) {String urlString = AppConstant.getUrl(getApplicationContext()) + "ServletService?Action=getOneRow";urlString = urlString + "&ID=" + params[0] + "&Table=dishes";String json = httpHelper.HttpRequest(urlString);return json;}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);dialog.dismiss();if (result.trim().length() > 0) {try {jsonArray = new JSONArray(result);jsonObject = jsonArray.getJSONObject(0);((TextView)findViewById(TopTitleCenter)).setText(jsonObject.getString("title"));((TextView) findViewById(TopTitleCenter)).setTextSize(16);if (!TextUtils.isEmpty(jsonObject.getString("img_url"))) {asyncImageLoader.loadBitmap(serverUrl + "UploadFile/" + jsonObject.getString("img_url"),imageView1);}String intro = "单价:¥" + jsonObject.getString("price") + "\n";intro += "数量:" + jsonObject.getString("amount") + "\n";intro += "简介:" + jsonObject.getString("intro");tvIntro.setText(intro);} catch (JSONException e) {e.printStackTrace();}}}}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btnTopTitleRight:intent = new Intent(GoodDetailActivity.this, PlaceOrderActivity.class);intent.putExtra("id", id);startActivityForResult(intent, 1);break;case R.id.btnTopTitleLeft:finish();break;default:break;}}}。

androidAPK应用安装过程以及默认安装路径

androidAPK应用安装过程以及默认安装路径

应用安装过程以及默认安装路径分类:一:安装过程是类似或的文件格式。

通过将文件直接传到模拟器或手机中执行即可安装。

应用安装有如下四种方式1. 系统应用安装――开机时完成,没有安装界面2. 网络下载应用安装――通过应用完成,没有安装界面3. 工具安装――没有安装界面。

4. 第三方应用安装――通过卡里的文件安装,有安装界面,由应用处理安装及卸载过程的界面。

应用安装的流程及路径应用安装涉及到如下几个目录:系统自带的应用程序,无法删除用户程序安装的目录,有删除权限。

安装时把文件复制到此目录存放应用程序的数据将中的文件安装到目录下(文件是虚拟机的可执行文件,其大小约为原始文件大小的四分之一)安装过程:复制安装包到目录下,解压并扫描安装包,把文件(字节码)保存到目录,并目录下创建对应的应用数据目录。

卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。

一、系统应用安装:处理各种应用的安装,卸载,管理等工作,开机时由启动此服务(源文件路径:\\\\\\\\)服务启动的流程:1. 首先扫描安装“\”目录下的包1. (,| );2.第二步扫描安装“\”目录下的各个系统应用(, );3.第三步扫描“\”目录,即用户安装的第三方应用(, 0, );4.第四步扫描" \"目录,即安装保护的文件(目前没有遇到过此类的应用)。

(,0, | );安装应用的过程1(, , ) 遍历安装指定目录下的文件2(,, , ,) 安装文件3(, , ,, , )通过解析安装包获取到安装包的信息结构4(,); 实现文件复制的安装过程(源文件路径:\\\\)二、从上下载应用:应用需要使用账户登录才可以使用,选择某一应用后,开始下载安装包,此过程中,在手机的信号区有进度条提示,下载完成后,会自动调用的接口安装,调用接口如下:( , ):文件下载完成后保存的路径:处理返回的安装结果:安装的参数,从上下载的应用,安装参数为()接口函数的安装过程:1 (, , ,):安装完成后此名称保存在里,一般为,不是关键参数2 = (, );把文件复制到临时目录下的临时文件3 ( ,, ,, )解析临时文件,获取应用包名= ((), 0);4.判断如果带有参数,则调用(,,, ,, , ,)5.如果没有,则调用(,,, ,, , ,);6 (, , ,, , )以后的流程,与开机时的应用安装流程相同。

Android的文件系统根目录的结构

Android的文件系统根目录的结构

经过这几天在网上搜索关于Android文件系统的相关资料,发现已经有很多高手分析了Android的文件系统,这些高手多从不同的方面分析了其文件系统的结构和运行原理。

我这里就写一下自己的理解。

首先是Android的文件系统根目录的结构:# pwd && ls -a -l/drwxrwxrwt root root 2009-06-10 09:53 sqlite_stmt_journalsdrwxrwx--- system cache 2008-09-06 22:51 cached---rwxrwx system system 1970-01-01 08:00 sdcardlrwxrwxrwx root root 2009-06-09 22:11 etc -> /system/etcdrwxr-xr-x root root 2008-09-06 22:45 systemdrwxr-xr-x root root 1970-01-01 08:00 sysdrwxr-x--- root root 1970-01-01 08:00 sbin-rw-r--r-- root root 117 1970-01-01 08:00 runme.shdr-xr-xr-x root root 1970-01-01 08:00 proc-rwxr-x--- root root 1704 1970-01-01 08:00 init.trout.rc-rwxr-x--- root root 9329 1970-01-01 08:00 init.rc-rwxr-x--- root root 1677 1970-01-01 08:00 init.goldfish.rc-rwxr-x--- root root 106636 1970-01-01 08:00 init-rw-r--r-- root root 118 1970-01-01 08:00 default.propdrwxrwx--x system system 2008-09-06 22:51 datadrwx------ root root 2009-06-07 16:29 rootdrwxr-xr-x root root 2009-06-09 22:11 devsqlite_stmt_journals:一个根目录下的tmpfs文件系统,用于存放临时文件数据。

Android_launcher源码全面分析

Android_launcher源码全面分析
<favorite //程序快捷键属性标签
launcher:className="com.apical.radio.radioMainActivity" //点击图标时,需要启动的类 launcher:packageName="com.apical.radio" launcher:screen="1" launcher:x="0" l0auncher:y="0" /> //该应用的包名 //第1屏,0-4屏共5屏 //图标X位置,左上角第一个为0,向左递增,0-4共5个 //图标Y位置,左上角第一个为0,向下递增,0-2共3个
Launcher默认是有5个分屏,不过这个可以配置。同样,每行每列有多少图标也是可以配置 的。这里按我修改的是3行5列的界面排布(对应上面的效果图)。 一般配置APP的快捷方式,使用上面的属性标签就可以。
<appwidget //插件
launcher:className="de.dnsproject.clock_widget_main.Clock1AppWidgetProvider" //该应用的类 launcher:packageName="de.dnsproject.clock_widget_main" launcher:screen="1" launcher:x="2" launcher:y="1" launcher:spanX="3" launcher:spanY="2" /> //第1屏,0-4屏共5屏 //图标X位置,左上角第一个为0,向左递增,0-4共5个 //图标Y位置,左上角第一个为0,向下递增,0-2共3个 //在x方向上所占格数 //在y方向上所占格数 //该应用的包名

Android 实例子源代码文件下载地址380个合集

Android 实例子源代码文件下载地址380个合集

├─地图相关Android bikeroute自行车导航源码.rar: /file/64335654Android Gps Test源码.rar: /file/64335659Android GpsTracker源码.rar: /file/64335662Android 百度地图API-定位周边搜索POI源码.rar: /file/64335668 Android 百度地图API源码.rar: /file/64335674北京公交线路查询(离线).rar: /file/64335677获取Gps信息的程序源码.rar: /file/64335680├─安全保密Android 人脸识别功能使用源码.rar: /file/64333523Android 图形解锁源码.rar: /file/64333555Android 图案解锁之九宫解锁源码.rar: /file/64333551Android 安全卫士源码.rar: /file/64333388Android 安全卫士源码.rar: /file/64333756Android 屏幕锁源码.rar: /file/64333390Android 手机防火墙源码(DroidWall).rar: /file/64333548 Android 网络监视器源码.rar: /file/64333557Android 远程视频监控程序源码.rar: /file/64333558││├─摄影图像Android 3D相册图片滑动+倾斜+放大+倒影处理源码.rar:/file/64337328Android Google官网的图片缓存源码.rar: /file/64337332 Android PhotoStore图片浏览器源码.rar: /file/64337337 Android 二维码识别源码.rar: /file/64337349Android 仿美图秀秀和IOS系统的相机胶卷.rar: /file/64337351 Android 区域截图源码.rar: /file/64337363Android 图片浏览功能源码.rar: /file/64337573Android 图片浏览源码.rar: /file/64337576Android 多种统计图表源码.rar: /file/64337346Android 常用图片特效处理源码.rar: /file/64337345Android 水果相册浏览器源码.rar: /file/64337567Android 炫酷相册源码.rar: /file/64337623Android 画图工具源码.rar: /file/64337358Android 画图程序源码.rar: /file/64337352ImageView控件缩放和旋转图片源码.rar: /file/64337628PC机摄像头摄像数据在Android手机上同步显示的源.rar:/file/64337630调用系统相册和系统照相机功能雨实例源码.rar: /file/64337632│├─生活相关Andriod 日程管理软件源码.rar: /file/64337611Android MyContacts通讯录源码.rar: /file/64337612Android UI界面漂亮的天气预报源码.rar: /file/64337633 Android 万年历源码.rar: /file/64337866Android 个人记账软件.rar: /file/64337651Android 事务提醒工具源码.rar: /file/64337777Android 仿Siri的中文语音助理源码.rar: /file/64337648 Android 体重计算源码.rar: /file/64337792Android 健康饮食搭配源码.rar: /file/64337669android 公交查询.rar: /file/64337656Android 北京地铁导航源码.rar: /file/64337636Android 医药助手源码.rar: /file/64337881Android 名片识别源码.rar: /file/64337756Android 城市天气预报源码.rar: /file/64337643Android 备忘录源码.rar: /file/64337639Android 天气预报加widget源码.rar: /file/64337804Android 天气预报源码.rar: /file/64337812Android 完整的通讯录项目源码.rar: /file/64337865Android 宿舍值日随机生成器.rar: /file/64337878Android 小米系统之便签源码.rar: /file/64337874Android 小钢琴源码.rar: /file/64337871Android 带手势划动功能的日历源码.rar: /file/64337644 Android 影院选坐源码.rar: /file/64337883Android 快捷查询源码.rar: /file/64337705Android 手机小闹钟源码.rar: /file/64337779Android 时光日志个人日程管理源码.rar: /file/64337774 Android 沈阳公交源码.rar: /file/64337766Android 生活手册源码.rar: /file/64337773Android 秒表倒计时源码.rar: /file/64337707Android 简单的机票预订系统源码.rar: /file/64337662 Android 简单计步器源码.rar: /file/64337663Android 精美愤怒的小闹钟源码.rar: /file/64337676Android 节日短信回复助手源码.rar: /file/64337675Android 蓝虫火车票余票查询源码.rar: /file/64337706 Android 记账本源码.rar: /file/64337658Android 超简单的电子购物程序.rar: /file/64337640Android 酒店预订系统源码.rar: /file/64337699Android 闪光灯手电筒软件源码.rar: /file/64337759Android 随手记记账应用源码.rar: /file/64337791android城市列表特效-触摸查找源码.rar: /file/64337887 android日记系统源码(数据库的基本操作).rar: /file/64337898 android查询软件源代码(身份证号,号码归属等).rar:/file/64337885ndroid 查询工具源代码.rar: /file/64337904ShareSDK超级强大的社会化分享(强大分享界面UI).rar:/file/64337913天气提醒程序源码.rar: /file/64337916手机归属地查询程序.rar: /file/64337915│├─聊天通讯Android SipDroid客户端源码.rar: /file/64337935Android SMSPopup速读短信源码.rar: /file/64337939Android TorProxy和Shadow开源项目.rar: /file/64337949 Android ViewPager+Fragment实现QQ界面.rar: /file/64337952 Android 仿QQ客户端及服务端源码.rar: /file/64337955 Android 仿飞鸽传书源码.rar: /file/64337961Android 公司通讯录(含来电号码姓名查询和搜索功能).rar:/file/64337963Android 完美高仿的微信源码.rar: /file/64337973Android 驴友社交系统源码.rar: /file/64337967Android简单通讯源码:手机控制PC的关机、重启、.rar:/file/64337985android蓝牙聊天的应用源码.rar: /file/64337993Imsdroid语音视频通话源码.rar: /file/64338014安卓程序源码之完美高仿微信源码.rar: /file/64338020│└─辅助类库Android 3D倒影效果源码.rar: /file/64336548Android Activity设置相同的action进行判断源码.rar:/file/64336550Android afinal开源框架实例源码.rar: /file/64336551Android Fireworks烟花效果源码.rar: /file/64336555Android fleep滑动切换tab(切换带动画).rar: /file/64336558 Android GridView拖拽实例源码.rar: /file/64336572Android ImageView图片循环跑马灯效果源码.rar: /file/64336573 Android ListView下拉刷新Demo.rar: /file/64336576Android ListView反弹效果源码.rar: /file/64336575Android OpenGL的一个简单的例子.rar: /file/64336577Android opengl绘制飘动的国旗效果源码.rar: /file/64336578 Android PathEffect效果实例源码.rar: /file/64336579Android ScrollableTabHost tab控件.rar: /file/64336580Android Spinner图文混排源码.rar: /file/64336581Android SwipeView类似桌面的滑动界面.rar: /file/64336585 Android TabHost内嵌ActivityGroup界面管理源码.rar:/file/64336588Android Tools4U源码.rar: /file/64336591Android ui开发类库示例源码.rar: /file/64336592Android WeatherForecast应用源码.rar: /file/64336594Android WebViewJS应用源码.rar: /file/64336595Android 三种圆形缓冲的进度条源码.rar: /file/64336771Android 下拉通知效果源码.rar: /file/64336824Android 不同形状的进度条源码.rar: /file/64336602Android 与php服务器交互实例源码.rar: /file/64336849 Android 仿360恶意广告拦截扫描UI效果源码.rar: /file/64336685 Android 仿微信二维码名片源码.rar: /file/64336733Android 仿快播搜索框上方悬浮的文字搜索源码.rar:/file/64336717Android 仿新版人人的效果源码.rar: /file/64336735Android 仿谷歌侧边栏导航源码.rar: /file/64336713Android 使用Gallery_tabhost实现标签效果图源码.rar:/file/64336777Android 使用opengl写动态壁纸的类库.rar: /file/64336779 Android 倒计时实现源码.rar: /file/64336617Android 吹一吹效果源码.rar: /file/64336615Android 图像冰冻特效源码.rar: /file/64336811Android 图像柔化美白特效源码.rar: /file/64336819Android 图像连环画特效源码.rar: /file/64336813Android 图表生成类库.rar: /file/64336809Android 多种android控件的Demo.rar: /file/64336660Android 实现QQ好友列表源码.rar: /file/64336772Android 屏幕颜色的变换源码.rar: /file/64336770Android 应用软件自动更新源码.rar: /file/64336847Android 拍照与录像切换UI源码.rar: /file/64336769Android 控件抖动效果源码.rar: /file/64336767Android 搜索关键字飞入飞出效果源码.rar: /file/64336794 Android 支付宝控件接口示例源码.rar: /file/64336851Android 显示GIF动画源码.rar: /file/64336827Android 模仿iphone时间滚轮控件源码.rar: /file/64336768 Android 水波效果源码.rar: /file/64336791Android 测试周围环境分贝的功能源码.rar: /file/64336603 Android 滑动翻页源码.rar: /file/64336756Android 点击屏幕更换图片源码.rar: /file/64336651Android 点按钮添加TableRow源码.rar: /file/64336622Android 烟花效果源码.rar: /file/64336833Android 焦点图片滚动源码.rar: /file/64336766Android 用户界面之重写onKeyDown方法源码.rar: /file/64336848 Android 登录界面记住密码功能源码.rar: /file/64336620Android 百度地图之自定义公交路线源码.rar: /file/64336601 Android 简单2D动画源码.rar: /file/64336765Android 网易新闻横向导航源码.rar: /file/64336822Android 自定义泡泡效果源码.rar: /file/64336856Android 视频浮动窗口源码.rar: /file/64336780Android 触摸屏幕产生小气泡的效果应用源码.rar: /file/64336613 Android 超炫的Path Button效果源码.rar: /file/64336612 Android 逐帧动画源码.rar: /file/64336855Android 随手势进行3D旋转的源码.rar: /file/64336796Android 非常漂亮的滚动选择日期控件.rar: /file/64336746 Android 音乐播放器歌词列表式同步显示功能源码.rar:/file/64336843Android 页面特效集合源码.rar: /file/64336842Android 颜色选取控件.rar: /file/64336835Android 风车效果源码.rar: /file/64336747Android 高仿WIN8系统磁贴点击下沉倾斜效果源码.rar:/file/64336748Android火焰效果程序源码.rar: /file/64336858EditText插入QQ表情源码.rar: /file/64336860加载时闪烁点样式的启动画面.rar: /file/64336874安卓游戏打地鼠源码.rar: /file/64336872带文字的ProgressBar Demo源码.rar: /file/64336873进度条对话框Demo.rar: /file/64336875365MobileSecretary v1.0.6(365手机助手AIDL).rar: /file/64263563 AdXmpp(Openfire+asmack+spark).rar: /file/64263065AidlDemo(简单aidl的例子).rar: /file/64263064aidl跨进程调用.rar: /file/64263066andbatdog电池监控.rar: /file/64263067andbatdog监视电池.rar: /file/64263068andricoFacebook客户端.rar: /file/64263069Android Gamex木马分析报告.rar: /file/64263070Android 股票源码.rar: /file/64263071android-stocker.rar: /file/64263072Android下的加密信息客户端WhisperSystems-TextSecure.rar: /file/64263073Android与js交互.rar: /file/64263074Android中监听电话状态.rar: /file/64263075Android之Wifi学习教程.rar: /file/64263076android各种传感器实例源码.rar: /file/64263077android在wifi下手机与电脑的socket通信.rar: /file/64263114 Android手机的VoIP客户端Sipdroid.rar: /file/64263078Android源代码定时情景模式切换.rar: /file/64263079Android短信拦截源码.rar: /file/64263080Android股票K线图.rar: /file/64263081Android股票StaticChartDemo.rar: /file/64263082Android自动发送短信.rar: /file/64263115Android远程登录含有loading登录效.rar: /file/64263116Android通讯录(含服务端).rar: /file/64263155BOOK看遍所有UI控件.rar: /file/64263117BrewClock闹钟.rar: /file/64263118BTAndroidWebViewSelection(webview选择文字).rar: /file/64263119 hotel宾馆系统.rar: /file/64269786ImageView 图片循环跑马灯的效果.rar: /file/64269787ipcamera-for-android 手机变成IP Camera.rar: /file/64269795三国杀版连连看(使用html5的canvas特性,纯javascript开发).rar: /file/64269788个人消费记录软件.rar: /file/64269796五种不同的Toast效果.rar: /file/64269797从网络上获取图片.rar: /file/64269798仓库管理系统(单机版).rar: /file/64269799仿ireader书架.rar: /file/64269800仿优酷Android客户端图片左右滑动(自动滑动).rar: /file/64269801 仿百度新闻(手机端和服务器端源代码).rar: /file/64269802休闲生活网络版服务器直接访问即可.rar: /file/64269810使用Vitamio打造自己的Android万能播放器(1)——在线播放.rar: /file/64269803侧边栏滑动.rar: /file/64269804免流量蓝牙聊天软件源码.rar: /file/64269805击溃360手机卫士的三大防护.rar: /file/64269806动画效果translate、scale、alpha、rotate 切换Activity动画控件位置调整.rar: /file/64269807原来PATH的菜单效果如此简单。

【转】Android源代码编译命令mmmmmmmake分析--不错

【转】Android源代码编译命令mmmmmmmake分析--不错

【转】Android源代码编译命令mmmmmmmake分析--不错在前⽂中,我们分析了Android编译环境的初始化过程。

Android编译环境初始化完成后,我们就可以⽤m/mm/mmm/make命令编译源代码了。

当然,这要求每⼀个模块都有⼀个Android.mk⽂件。

Android.mk实际上是⼀个Makefile脚本,⽤来描述模块编译信息。

Android编译系统通过整合Android.mk⽂件完成编译过程。

本⽂就对Android源代码的编译过程进⾏详细分析。

从前⾯这篇⽂章可以知道,lunch命令其实是定义在build/envsetup.sh⽂件中的函数lunch提供的。

与lunch命令⼀样,m、mm和mmm命令也分别是由定义在build/envsetup.sh⽂件中的函数m、mm和mmm提供的,⽽这三个函数⼜都是通过make命令来对源代码进⾏编译的。

事实上,命令m就是对make命令的简单封装,并且是⽤来对整个Android源代码进⾏编译,⽽命令mm和mmm都是通过make命令来对Android源码中的指定模块进⾏编译。

接下来我们就先分别介绍⼀下函数m、mm和mmm的实现,然后进⼀步分析它们是如何通过make命令来编译代码的。

函数m的实现如下所⽰:[plain]1. function m()2. {3. T=$(gettop)4. if [ "$T" ]; then5. make -C $T $@6. else7. echo "Couldn't locate the top of the tree. Try setting TOP."8. fi9. }函数m调⽤函数gettop得到的是Android源代码根⽬录T。

在执⾏make命令的时候,先通过-C选项指定⼯作⽬录为T,即Android源代码根⽬录,接着⼜将执⾏命令m指定的参数$@作为命令make的参数。

Android的文件系统结构

Android的文件系统结构

Android的⽂件系统结构1、Android⽂件系统的结构官⽅android源码编译后得到的⽂件如下:其中有system.img,ramdisk.img,userdata.img三个映像⽂件。

其中,ramdisk.img是⽂件系统,system.img包括了主要的包、库等⽂件,userdata.img包括了⼀些⽤户数据,当emulator加载这3个映像⽂件后,会把system.img和userdata.img分别加载到ramdisk⽂件系统中的system和userdata⽬录下。

2、分离组建Android⽂件系统system.img,ramdisk.img,userdata.img映像⽂件是采⽤cpio打包、gzip压缩的,可以通过file命令验证:filer amdisk.img,输出:[plain]1. ramdisk.img:gzip compressed data, from Unix, last modified:其中ramdisk.img是⼀个分区映像⽂件,即是⼀个⽂件系统(root file system),,kernel启动时,ramdisk负责init,system.img包括了主要系统,系统app等,挂载于⽂件系统下的system⽂件夹, userdata.img包括了⼀些⽤户数据,被挂载到⽂件系统下的data⽂件夹下。

另外Android源码编译后还有root、system、data三个⽂件夹,其实就是上述三个img解压之后的内容⽽已,root⽂件夹⾥⾯的内容就是ramdisk.img解压后的内容,即是⼀个⽂件系统,包括system、data、bin、dev等⽬录。

⽽system与data则对应着system.img与userdata.img 的解压后的内容。

验证⼀下就⾏了,将ramdisk.img复制⼀份到任何其他⽬录下,将其名称改为ramdisk.img.gz,并使⽤命令[java]1. gunzip ramdisk.img.gz然后新建⼀个名为ramdisk的⽂件夹,转到ramdisk⽬录,输⼊命令[html]1. <pre name="code" class="java">cpio-i -F ../ramdisk.img这下,就能看见ramdisk⾥⾯的内容与root⽂件夹⼀样的了。

Android启动过程

Android启动过程

1. Boot系统初始化,具体过程参见(system\core\init\Init.c)中的main函数,这时候,手机或者模拟器出现的画面是一个console,显示“ANDROID”msg。

2. 初始化成功后,就开始mounting系统,具体参见(system\core\mountd\Mountd.c) 中的main 函数。

3.接下来运行ndroidRuntime,并开始启动java虚拟机dalvikvm。

4. Java虚拟机启动成功后,开始系统初始化。

系统初始的第一步是用JNI方式实现的,对应java代码为(frameworks\base\services\java\com\android\server\SystemServer.java) init1(Native)函数,对应的JNI C++代码为(frameworks\base\core\jni\server\com_android_server_SystemServer.cpp),而实现的C++代码为(frameworks\base\cmds\system_server\library\ System_init.cpp) 中的system_init()函数。

5. system_init调用SurfaceFlinger,SurfaceFlinger的readyToRun()函数用BootAnimation来实现开机动画,这时候手机或者模拟器显示是一副背景图加一个动态的小机器人。

6. 系统初始化的第二步,将启动ServerThread进程,参见SystemServer.init2()。

ServerThread 将启动各种系统服务,如Power Manager、Activity Manager等等,具体参见ServerThread的run函数,ServerThread同在SystemServer.java中。

7.这之后的事,应该就是进入系统了。

Android系统开发编译及系统移植

Android系统开发编译及系统移植

Android系统开发编译环境配置主机系统:Ubuntu9.04(1)安装如下软件包sudo apt-get install git-coresudo apt-get install gnupgsudo apt-get install sun-java5-jdksudo apt-get install flexsudo apt-get install bisonsudo apt-get install gperfsudo apt-get install libsdl-devsudo apt-get install libesd0-devsudo apt-get install build-essentialsudo apt-get install zipsudo apt-get install curlsudo apt-get install libncurses5-devsudo apt-get install zlib1g-devandroid编译对java的需求只支持jdk5.0低版本,jdk5.0 update 12版本和java 6不支持。

(2)下载repo工具curl /repo >/bin/repochmod a+x /bin/repo(3)创建源代码下载目录:mkdir /work/android-froyo-r2(4)用repo工具初始化一个版本(以android2.2r2为例)cd /work/android-froyo-r2repo init -u git:///platform/manifest.git -b froyo初始化过程中会显示相关的版本的TAG信息,同时会提示你输入用户名和邮箱地址,以上面的方式初始化的是android2.2 froyo的最新版本,android2.2本身也会有很多个版本,这可以从TAG信息中看出来,当前froyo的所有版本如下:* [new tag] android-2.2.1_r1 -> android-2.2.1_r1* [new tag] android-2.2_r1 -> android-2.2_r1* [new tag] android-2.2_r1.1 -> android-2.2_r1.1* [new tag] android-2.2_r1.2 -> android-2.2_r1.2* [new tag] android-2.2_r1.3 -> android-2.2_r1.3* [new tag] android-cts-2.2_r1 -> android-cts-2.2_r1* [new tag] android-cts-2.2_r2 -> android-cts-2.2_r2* [new tag] android-cts-2.2_r3 -> android-cts-2.2_r3这样每次下载的都是最新的版本,当然我们也可以根据TAG信息下载某一特定的版本如下:repo init -u git:///platform/manifest.git -b android-cts-2.2_r3(5)下载代码repo syncfroyo版本的代码大小超过2G,漫长的下载过程。

36个Android开发常用经典代码大全

36个Android开发常用经典代码大全

36个Android开发常⽤经典代码⼤全本⽂汇集36个Android开发常⽤经典代码⽚段,包括拨打电话、发送短信、唤醒屏幕并解锁、是否有⽹络连接、动态显⽰或者是隐藏软键盘等,希望对您有所帮助。

//36个Android开发常⽤代码⽚段//拨打电话public static void call(Context context, String phoneNumber) {context.startActivity( new Intent(Intent.ACTION_CALL, Uri.parse( "tel:" + phoneNumber)));}//跳转⾄拨号界⾯public static void callDial(Context context, String phoneNumber) {context.startActivity( new Intent(Intent.ACTION_DIAL, Uri.parse( "tel:" + phoneNumber)));}//发送短信public static void sendSms(Context context, String phoneNumber,String content) {Uri uri = Uri.parse( "smsto:"+ (TextUtils.isEmpty(phoneNumber) ? "" : phoneNumber));Intent intent = new Intent(Intent.ACTION_SENDTO, uri);intent.putExtra( "sms_body" , TextUtils.isEmpty(content) ? "" : content);context.startActivity(intent);}//唤醒屏幕并解锁public static void wakeUpAndUnlock(Context context){KeyguardManager km= (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);KeyguardManager.KeyguardLock kl = km.newKeyguardLock( "unLock" );//解锁kl.disableKeyguard();//获取电源管理器对象PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE);//获取PowerManager.WakeLock对象,后⾯的参数|表⽰同时传⼊两个值,最后的是LogCat⾥⽤的TagPowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright" ); //点亮屏幕wl.acquire();//释放wl.release();}//需要添加权限<uses-permission android:name= "android.permission.WAKE_LOCK" /><uses-permission android:name= "android.permission.DISABLE_KEYGUARD" />//判断当前App处于前台还是后台状态public static boolean isApplicationBackground( final Context context) {ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);@SuppressWarnings ( "deprecation" )List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks( 1 ); if (!tasks.isEmpty()) {ComponentName topActivity = tasks.get( 0 ).topActivity;if (!topActivity.getPackageName().equals(context.getPackageName())) { return true ;}}return false ;}//需要添加权限&lt;uses-permissionandroid:name= "android.permission.GET_TASKS" />//判断当前⼿机是否处于锁屏(睡眠)状态public static boolean isSleeping(Context context) {KeyguardManager kgMgr = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);boolean isSleeping = kgMgr.inKeyguardRestrictedInputMode();return isSleeping;}//判断当前是否有⽹络连接public static boolean isOnline(Context context) {ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Activity.CONNECTIVITY_SERVICE);NetworkInfo info = manager.getActiveNetworkInfo();if (info != null && info.isConnected()) {return true ;}return false ;}//判断当前是否是WIFI连接状态public static boolean isWifiConnected(Context context) {ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo wifiNetworkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);if (wifiNetworkInfo.isConnected()) {return true ;}return false ;}//安装APKpublic static void installApk(Context context, File file) {Intent intent = new Intent();intent.setAction( "android.intent.action.VIEW" );intent.addCategory( "android.intent.category.DEFAULT" );intent.setType( "application/vnd.android.package-archive" );intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive" );intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}//判断当前设备是否为⼿机public static boolean isPhone(Context context) {TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);if (telephony.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) { return false ;} else {return true ;}}//获取当前设备宽⾼,单位px@SuppressWarnings ( "deprecation" )public static int getDeviceWidth(Context context) {WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);return manager.getDefaultDisplay().getWidth();}@SuppressWarnings ( "deprecation" )public static int getDeviceHeight(Context context) {WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);return manager.getDefaultDisplay().getHeight();}//获取当前设备的IMEI,需要与上⾯的isPhone()⼀起使⽤@TargetApi (Build.VERSION_CODES.CUPCAKE)public static String getDeviceIMEI(Context context) {String deviceId;if (isPhone(context)) {TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);deviceId = telephony.getDeviceId();} else {deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);}return deviceId;}//获取当前设备的MAC地址public static String getMacAddress(Context context) {String macAddress;WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);WifiInfo info = wifi.getConnectionInfo();macAddress = info.getMacAddress();if ( null == macAddress) {return "" ;}macAddress = macAddress.replace( ":" , "" );return macAddress;}//获取当前程序的版本号public static String getAppVersion(Context context) {String version = "0" ;try {version = context.getPackageManager().getPackageInfo(context.getPackageName(), 0 ).versionName;} catch (NotFoundException e) {e.printStackTrace();}return version;}//收集设备信息,⽤于信息统计分析public static Properties collectDeviceInfo(Context context) {Properties mDeviceCrashInfo = new Properties();try {PackageManager pm = context.getPackageManager();PackageInfo pi = pm.getPackageInfo(context.getPackageName(), PackageManager.GET_ACTIVITIES);if (pi != null ) {mDeviceCrashInfo.put(VERSION_NAME,pi.versionName == null ? "not set" : pi.versionName);mDeviceCrashInfo.put(VERSION_CODE, pi.versionCode);}} catch (NotFoundException e) {Log.e(TAG, "Error while collect package info" , e);}Field[] fields = Build. class .getDeclaredFields();for (Field field : fields) {try {field.setAccessible( true );mDeviceCrashInfo.put(field.getName(), field.get( null ));} catch (Exception e) {Log.e(TAG, "Error while collect crash info" , e);}}return mDeviceCrashInfo;}public static String collectDeviceInfoStr(Context context) {Properties prop = collectDeviceInfo(context);Set deviceInfos = prop.keySet();StringBuilder deviceInfoStr = new StringBuilder( "{\n" );for (Iterator iter = deviceInfos.iterator(); iter.hasNext();) {Object item = iter.next();deviceInfoStr.append( "\t\t\t" + item + ":" + prop.get(item)+ ", \n" );}deviceInfoStr.append( "}" );return deviceInfoStr.toString();}//是否有SD卡public static boolean haveSDCard() {return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);}//动态隐藏软键盘@TargetApi (Build.VERSION_CODES.CUPCAKE)public static void hideSoftInput(Activity activity) {View view = activity.getWindow().peekDecorView();if (view != null ) {InputMethodManager inputmanger = (InputMethodManager) activity .getSystemService(Context.INPUT_METHOD_SERVICE);inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0 );}}@TargetApi (Build.VERSION_CODES.CUPCAKE)public static void hideSoftInput(Context context, EditText edit) {edit.clearFocus();InputMethodManager inputmanger = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);inputmanger.hideSoftInputFromWindow(edit.getWindowToken(), 0 );}//动态显⽰软键盘@TargetApi (Build.VERSION_CODES.CUPCAKE)public static void showSoftInput(Context context, EditText edit) {edit.setFocusable( true );edit.setFocusableInTouchMode( true );edit.requestFocus();InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);inputManager.showSoftInput(edit, 0 );}//动态显⽰或者是隐藏软键盘@TargetApi (Build.VERSION_CODES.CUPCAKE)public static void toggleSoftInput(Context context, EditText edit) {edit.setFocusable( true );edit.setFocusableInTouchMode( true );edit.requestFocus();InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);inputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0 ); }//主动回到Home,后台运⾏public static void goHome(Context context) {Intent mHomeIntent = new Intent(Intent.ACTION_MAIN);mHomeIntent.addCategory(Intent.CATEGORY_HOME);mHomeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);context.startActivity(mHomeIntent);}//获取状态栏⾼度//注意,要在onWindowFocusChanged中调⽤,在onCreate中获取⾼度为0@TargetApi (Build.VERSION_CODES.CUPCAKE)public static int getStatusBarHeight(Activity activity) {Rect frame = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);return frame.top;}//获取状态栏⾼度+标题栏(ActionBar)⾼度//(注意,如果没有ActionBar,那么获取的⾼度将和上⾯的是⼀样的,只有状态栏的⾼度)public static int getTopBarHeight(Activity activity) {return activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();}//获取MCC+MNC代码 (SIM卡运营商国家代码和运营商⽹络代码)//仅当⽤户已在⽹络注册时有效, CDMA 可能会⽆效(中国移动:46000 //46002, 中国联通:46001,中国电信:46003)public static String getNetworkOperator(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);return telephonyManager.getNetworkOperator();}//返回移动⽹络运营商的名字//(例:中国联通、中国移动、中国电信) 仅当⽤户已在⽹络注册时有效, //CDMA 可能会⽆效)public static String getNetworkOperatorName(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);return telephonyManager.getNetworkOperatorName();}//返回移动终端类型PHONE_TYPE_NONE :0 ⼿机制式未知PHONE_TYPE_GSM :1 ⼿机制式为GSM,移动和联通PHONE_TYPE_CDMA :2 ⼿机制式为CDMA,电信PHONE_TYPE_SIP:3public static int getPhoneType(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);return telephonyManager.getPhoneType();}//判断⼿机连接的⽹络类型(2G,3G,4G)//联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDOpublic class Constants {/*** Unknown network class*/public static final int NETWORK_CLASS_UNKNOWN = 0 ;/*** wifi net work*/public static final int NETWORK_WIFI = 1 ;/*** "2G" networks*/public static final int NETWORK_CLASS_2_G = 2 ;/*** "3G" networks*/public static final int NETWORK_CLASS_3_G = 3 ;/*** "4G" networks*/public static final int NETWORK_CLASS_4_G = 4 ;}public static int getNetWorkClass(Context context) {TelephonyManager telephonyManager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE);switch (telephonyManager.getNetworkType()) {case WORK_TYPE_GPRS:case WORK_TYPE_EDGE:case WORK_TYPE_CDMA:case WORK_TYPE_1xRTT:case WORK_TYPE_IDEN:return WORK_CLASS_2_G;case WORK_TYPE_UMTS:case WORK_TYPE_EVDO_0:case WORK_TYPE_EVDO_A:case WORK_TYPE_HSDPA:case WORK_TYPE_HSUPA:case WORK_TYPE_HSPA:case WORK_TYPE_EVDO_B:case WORK_TYPE_EHRPD:case WORK_TYPE_HSPAP:return WORK_CLASS_3_G;case WORK_TYPE_LTE:return WORK_CLASS_4_G;default :return WORK_CLASS_UNKNOWN;}}//判断当前⼿机的⽹络类型(WIFI还是2,3,4G)//需要⽤到上⾯的⽅法public static int getNetWorkStatus(Context context) {int netWorkType = WORK_CLASS_UNKNOWN;ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();if (networkInfo != null && networkInfo.isConnected()) {int type = networkInfo.getType();if (type == ConnectivityManager.TYPE_WIFI) {netWorkType = WORK_WIFI;} else if (type == ConnectivityManager.TYPE_MOBILE) {netWorkType = getNetWorkClass(context);}}return netWorkType;}//px-dp转换public static int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return ( int ) (dpValue * scale + 0 .5f);}public static int px2dip(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density;return ( int ) (pxValue / scale + 0 .5f);}//px-sp转换public static int px2sp(Context context, float pxValue) {final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return ( int ) (pxValue / fontScale + 0 .5f);}public static int sp2px(Context context, float spValue) {final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return ( int ) (spValue * fontScale + 0 .5f);}//把⼀个毫秒数转化成时间字符串//格式为⼩时/分/秒/毫秒(如:24903600 –> 06⼩时55分03秒600毫秒)/*** @param millis* 要转化的毫秒数。

android输入法01:SoftKeyboard源码解析01

android输入法01:SoftKeyboard源码解析01

android输入法01:SoftKeyboard源码解析01本文主要介绍android自带输入法实例SoftKeyboard的源码,共分为两篇:第一篇为SoftKeyboard框架概述,第二篇为源码注释。

1、IMF简介一个IMF结构中包含三个主要的部分:•i nput method manager:管理各部分的交互。

它是一个客户端API,存在于各个应用程序的context中,用来沟通管理所有进程间交互的全局系统服务。

•i nput method(IME):实现一个允许用户生成文本的独立交互模块。

系统绑定一个当前的输入法。

使其创建和生成,决定输入法何时隐藏或者显示它的UI。

同一时间只能有一个IME运行。

•c lient application:通过输入法管理器控制输入焦点和IME的状态。

一次只能有一个客户端使用IME。

1.1 InputManager由UI控件(View,TextView,EditText等)调用,用来操作输入法。

比如,打开,关闭,切换输入法等。

它是整个输入法框架(IMF)结构的核心API,处理应用程序和当前输入法的交互。

可以通过Context.getSystemService()来获取一个InputMethodManager的实例。

在开发过程中,最基础最重要的就是养成阅读API的习惯。

优秀的程序员要养成把自己关在小黑屋里,断绝与外界的联网和联系,仅仅靠自己电脑中的开发环境和API文档,以及漂亮女仆送来的每天三顿饭,写出优秀的程序。

这个在武侠小说中叫闭关,在软件开发中叫Clean Room,哈哈。

Android的API文档在:%SDK_ROOM%/docs/reference/index.html,InputManager类的位置:%SDK_ROOM%/docs/reference/android/view/inputmethod/InputMethodManager.html 由于,该类跟本次要讲的Sample关系不大,这里就不详细分析,请各位自行阅读API doc吧。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档