《android教程底层》PPT课件

上传人:小**** 文档编号:297352737 上传时间:2022-05-24 格式:PPT 页数:64 大小:4.10MB
返回 下载 相关 举报
《android教程底层》PPT课件_第1页
第1页 / 共64页
《android教程底层》PPT课件_第2页
第2页 / 共64页
《android教程底层》PPT课件_第3页
第3页 / 共64页
《android教程底层》PPT课件_第4页
第4页 / 共64页
《android教程底层》PPT课件_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《《android教程底层》PPT课件》由会员分享,可在线阅读,更多相关《《android教程底层》PPT课件(64页珍藏版)》请在金锄头文库上搜索。

1、Android开发杂谈开发杂谈广州网易,闻波wenbob1整理ppta.了解系统了解系统了解程序了解程序优化与混淆优化与混淆Hacking内容提要内容提要2整理ppt了解系统了解系统a.系统组成与特点系统组成与特点系统启动过程系统启动过程3整理ppt典型的手机硬件方案典型的手机硬件方案4整理pptAndroid的体系结构的体系结构5整理ppt五层体系结构解读五层体系结构解读a.ApplicationAndroid内置程序:内置程序:Home、Contracts、PhoneGoogle闭源程序:闭源程序:GoogleClientVendor程序:程序:HTCDream,OMSFrameworkA

2、ndroidCoreCode(java)VendorextensionsNativelibraries功能函数库:功能函数库:C/C+库、音视频、库、音视频、SQLite、OpenGL/ES、Webkit、FreeType、SSLAndroidJNIAndroidDalvikVMUserspacedriversLinuxKernel精简版的精简版的IPC补丁:补丁:Binder更积极的电源管理:没有人宣布要用的部件,就关掉更积极的电源管理:没有人宣布要用的部件,就关掉6整理ppt函数调用关系函数调用关系7整理pptAndroid的重要特色的重要特色a.HAL许多驱动程序以用户态的方式运行,依赖

3、内核的许多驱动程序以用户态的方式运行,依赖内核的HAL机制。机制。CameraService、SurfaceFlinger、AudioFlinger等都位于用户态。等都位于用户态。Bionic精简版的精简版的C/C+运行库,类似于嵌入式系统中常用的运行库,类似于嵌入式系统中常用的uCLib。被重复发明的轮子。为什么不用被重复发明的轮子。为什么不用uCLib?商业用途的版权考虑,不想?商业用途的版权考虑,不想被被LGPL限制。限制。SurfaceFlinger表面渲染,目前是比较低效的表面渲染,目前是比较低效的C代码实现,有待芯片厂商来改善。代码实现,有待芯片厂商来改善。8整理pptAndroi

4、d的重要特色的重要特色a.BrowserWebkit移植版,并不是移植版,并不是Chrome,无,无Plugins接口接口内置内置Googlegears(无源代码(无源代码)2.x提供了更多的提供了更多的HTML5特性,如本地存储等特性,如本地存储等不支持文件上传不支持文件上传inputtype=file.DalvikVM为什么又发明了轮子为什么又发明了轮子:绕开绕开SUN公司的授权的商业考虑公司的授权的商业考虑轻量级,轻量级,500KB大小,适合移动设备的虚拟机大小,适合移动设备的虚拟机使用使用fork方式执行应用程序方式执行应用程序(所谓所谓Zygote),启动速度更快,启动速度更快9整理

5、ppt了解系统了解系统a.系统组成与特点系统组成与特点系统启动过程系统启动过程10整理ppt系统引导过程系统引导过程InitialProgramLoaderSecondProgramLoaderLinuxkernelinit相关的分区镜像文件相关的分区镜像文件a.hboot.imgSPLb.radio.img射频通讯相关的程序(GSM、CDMA)c.boot.imgLinuxkerneld.system.imgFramework,系统程序,运行库e.recovery.img用于恢复/升级系统f.userdata.img用户数据及程序安装的目录g.cache.img.硬件初始化,类似硬件初始化,

6、类似BIOS系统引导程序,类似系统引导程序,类似Grub操作系统内核操作系统内核第一个进程,脚本第一个进程,脚本init.conf11整理pptLinux内核启动过程内核启动过程内核文件为内核文件为boot.img,是,是gzip压缩包,分为两部分:压缩包,分为两部分:ramdisk.img+system.img启动过程和普通桌面启动过程和普通桌面Linux类似:类似:首先只读加载首先只读加载ramdisk.img。ramdisk中包括中包括init程序以程序以及配置文件及配置文件/etc/init.rc。加载后执行。加载后执行init程序。程序。init进程负责解析进程负责解析init.rc

7、,完成整个操作系统的启动。,完成整个操作系统的启动。init在处理过程中加载驱动,建立目录树和设备节点,在处理过程中加载驱动,建立目录树和设备节点,$lsmodsec47600-Live0 xbf01b000modem_pm_driver27682-Live0 xbf018000netmux_linkdriver103760permanent,Live0 xbf013000netmux5608819netmux_linkdriver,Live0 xbf000000加载加载system分区,装载初始系统文件。分区,装载初始系统文件。然后加载然后加载userdata分区,装载初始用户数据。分区,装

8、载初始用户数据。最后启动各种系统服务最后启动各种系统服务12整理ppt1号进程号进程init的处理过程的处理过程:daemons假定共假定共64MB内存,此时剩余内存,此时剩余40MB13整理ppt1号进程号进程init的处理过程的处理过程:services14整理ppt1号进程号进程init的处理过程的处理过程:services15整理ppt1号进程号进程init的处理过程的处理过程:注册服务注册服务剩余系统内存:剩余系统内存:20MB16整理ppt启动后启动后创建的进程创建的进程:root用户用户kthreadd,ksoftirqd,events,khelper,suspend,kbloc

9、kd,cqueue,kseriod,aio,rpciod,/基础服务基础服务mtdblockd,pdflush,kswapd,mountd,kmmcd,mmcqd,/磁盘与文件系统需要磁盘与文件系统需要debuggerd,adbd,/调试与调试与usb辅助功能辅助功能installd,/软件安装服务软件安装服务qemud,/有这个,那么本手机必定虚拟的有这个,那么本手机必定虚拟的反破解反破解程序应该检测程序应该检测zygote/受精卵受精卵17整理ppt启动后启动后创建的进程创建的进程radiorild手机模块的后台服务手机模块的后台服务com.android.phone手机功能的手机功能的j

10、ava层包装层包装bluetoothdbus-daemon可怜的可怜的dbus只用来做蓝牙消息传递只用来做蓝牙消息传递mediamediaserver多媒体服务多媒体服务systemservicemanager,/服务管理器服务管理器system_server,/各种系统功能的总服务程序(相当于各种系统功能的总服务程序(相当于MS-DOS的的INT21H,2FH)com.android.settings,/系统设置菜单系统设置菜单app_xxxandroid.process.acore,com.google.process.gapps,com.android.mms,com.android.a

11、larmclock,android.process.media18整理ppt1号进程号进程init的处理过程:的处理过程:GUIa.假设一个极端的硬件环境:a.中低端手机CPU:250-500MHzb.L1缓存:16-32K(无L2)c.总线:100MHzb.此时,系统里至少有40个必备的进程在运行c.应用程序可用内存:20MBd.Home现在还没启动19整理ppt了解程序了解程序虚拟机运行机制虚拟机运行机制GUI机制机制进程与线程进程与线程20整理ppt虚拟机的虚拟机的C/S创建机制创建机制字节码程序都是用字节码程序都是用app_process运行的。运行的。app_process负责也设负

12、责也设置用户和组、内存、检查置用户和组、内存、检查JNI函数、检查字节码、初始化虚拟机等函数、检查字节码、初始化虚拟机等等脏活累活。等脏活累活。classAppRuntime:/frameworks/base/cmds/app_process/app_main.cppclassAndroidRuntime:/frameworks/base/core/jni/AndroidRuntime.cppinit创建的创建的app_process进程被称为进程被称为zygote(受精卵受精卵)。运行后。运行后创建创建socket:/dev/socket/zygote,侦听和处理运行字节码,侦听和处理运行字

13、节码程序的请求程序的请求init.rcline243:servicezygote/system/bin/app_process-Xzygote/system/bin-zygote-start-system-serversocketzygotestream666onrestartwrite/sys/android_power/request_statewakeonrestartwrite/sys/power/stateoninit设置了参数设置了参数“-zygote”,进入服务模式。具体实现在,进入服务模式。具体实现在Java类:类:com.android.internal.os.ZygoteI

14、nit21整理pptZygote服务器服务器zygote在完成了虚拟机的初始化后,启动在完成了虚拟机的初始化后,启动UNIXdomainsocket服务,服务,循环接受命令,提供创建虚拟机的服务。循环接受命令,提供创建虚拟机的服务。voidrun()throwsZygoteInit.MethodAndArgsCallerintloopCount=ZygoteInit.GC_LOOP_COUNT;while(true)if(loopCount=0)ZygoteInit.gc();loopCount=ZygoteInit.GC_LOOP_COUNT;elseloopCount-;if(runOnc

15、e()break;之后,当需要运行之后,当需要运行manifest文件中的文件中的,和和中的类时,就中的类时,就会会通过通过socket向向zygote发送启动命令。发送启动命令。进程的执行主要有两种情况:进程的执行主要有两种情况:a.receiver收到特定的响应动作后,自动运行收到特定的响应动作后,自动运行(例如开机自动运行的例如开机自动运行的android.intent.action.BOOT_COMPLETED动作动作)手动运行手动运行(实质是被其他程序通过实质是被其他程序通过StartActivity等函数启动的等函数启动的)22整理pptJava程序的进程创建与执行程序的进程创建与

16、执行进程的创建是通过向进程的创建是通过向Zygote服务器提交请求来实现的。服务器提交请求来实现的。frameworks/base/core/java/android/os/Process.java542:pid=zygoteSendArgsAndGetPid(argsForZygote);zygote收到命令后,在收到命令后,在runOnce()函数中函数中fork一个子进程:一个子进程:(ZygoteConnection.java212)pid=Zygote.forkAndSpecialize(parsedArgs.uid,parsedArgs.gid,parsedArgs.gids,parsedArgs.debugFlags,rlimits);和和JVM相似,相似,Dalvik虚拟机也把传入类的虚拟机也把传入类的main方法作为入口。方法作为入口。函数函数RuntimeInit.zygoteInit()的最后,调用了的最后,调用了invokeStaticMain(startClass,startArgs),把传入的命令行参数作为类名加载,执行其,把传入的命令行参数作为类名加载,执

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号