版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PackageManagerService Intrduction,APK安装方式,文件浏览器双击,adb install/push *.apk,APK installation,Android market,内置apk开机安装, .,PackageManagerService scanPackageLI(),什么是安装?,将apk文件复制到程序目录下(/data/app/) 为应用创建数据目录(/data/data/package name/, 比如/data/data/com.actions.ota/) 提取apk里的dex文件到指定目录(/data/dalvik-cache/) 修改系统
2、包管理信息,Installd的启动,Installd:这是一个用c写成的带有main函数的守护进程,在开机之后由init.rc调用 脚本文件会创建一个/dev/socket/installd的socket,service installd /system/bin/installd class main socket installd stream 600 system system,建立installd连接,建立 installer 与 installd 的 socket 联接,/* systemserver.java */ Installer installer = new Installe
3、r(); installer.ping() ;,Installd调用,struct cmdinfo cmds = /命令名称,参数个数,命令执行函数 ping,0, do_ping , install,4, do_install , dexopt,3, do_dexopt , movedex,2, do_move_dex , rmdex,1, do_rm_dex , remove,2, do_remove , rename,3, do_rename , freecache,1, do_free_cache , rmcache,2, do_rm_cache , protect,2, do_pro
4、tect , getsize,4, do_get_size , rmuserdata,2, do_rm_user_data , movefiles,0, do_movefiles , linklib,2, do_linklib , unlinklib,1, do_unlinklib ,;,PMS的启动,在 systemserver.java 中启动包管理服务,pm=PackageManagerService.main(context,installer,factoryTest!=SystemServer.FACTORY_TEST_OFF,onlyCore);,public static fin
5、al IPackageManager main(Context context, Installer installer, boolean factoryTest, boolean onlyCore) PackageManagerService m = new PackageManagerService(context, installer, factoryTest, onlyCore); ServiceManager.addService(package, m); return m; ,建立PMS消息循环,建立PackageHandler消息循环,用于处理外部的apk安装请求消息, 如adb
6、 install, packageinstaller安装apk时会发送消息,/启动PMS的工作线程 mHandlerThread.start(); mHandler = new PackageHandler(mHandlerThread.getLooper();,Permissions解析,路径: /system/etc/permissions/platform.xml 该文件为某些uid和gid分配特定的权限,,/*这个是为sdcard_rw的gid分配访问SD卡的权限 */ /* 为shell这个uid分配删除安装包的权限 * / ,Android权限的实现,/*第一层:由应用设置,修改A
7、ndroidManifest.xm */ ,/*第二层:框架层,权限对应组,frameworks/base/data/etc/platform.xml */ ,/* 第三层:系统层,系统的权限, system/core/include/private/android_filesystem_config.h */ #define AID_RADIO 1001 /* telephony subsystem, RIL */ #define AID_INET 3003 /建立SOCKET的权限 static const struct android_id_info android_ids = radi
8、o, AID_RADIO, , “inet”, AID_INET, ,packages.xml解析,路径 :/data/system/packages.xml 记录了系统的permissions,以及每个apk的name, codePath, flags, ts, version, uesrID等信息 AndroidManifest.xml解析获取,解析完apk后将更新信息写入这个文件 每次开机PMS启动时直接从里面读取相关信息添加到内存相关列表中。当有apk升级,安装或删除时会更新这个文件。,Jar的优化,检查BootClassPath, mSharedLibraries及/system/f
9、ramework下的jar是否需要dexopt,需要的则通过dexopt进行优化,启动监测事件,需要监测的目录 /system/framework /system/app /data/app /data/app-private 主要监听add和remove事件,保存信息,将解析的每个apk的信息保存到packages.xml和packages.list文件里 packages.list记录了如下数据:pkgName,userId,debugFlag,dataPath(包的数据路径),结果,/data/app apk包 /data/app-lib native lib /data/data 数据
10、目录,其中的lib目录指向上面的/data/app-lib目录 /data/dalvik-cache/dataapp.apkclasses.dex 优化或编译后的Java bytecode,二、PackageManagerService启动过程,PackageManagerService.main(),PackageManagerService m = new PackageManagerService(); ServiceManager.addService(package, m);,解析/system/etc/permissions/下的xml文件,建立PackageHandler消息循环
11、,对jar进行dexopt优化,启动AppDirObserver监测几个目录的add/removed事件,ScanDirLI对几个目录下的apk逐个解析,建立installer与installd的socket联接,解析/data/system/packages.xml文件,双击apk,通过intent启动packageinstaller 的PackageInstallerActivity,Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(f), application/vnd.android.package-archive); startActivity(intent);,双击apk,installPackageWithVerificationAndEncryption,doHandleMessage (Message msg) switch (msg.what) case INIT_COPY: . ,packageins
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《高速电气化铁路接触网》课件2.2.4腕臂
- 《职业规划能力提升与就业指导》第一章
- 甲基硅氧烷生产工工作标准化能力考核试卷含答案
- 絮锦加工工岗位安全意识考核试卷含答案
- 景区运营管理师交接知识考核试卷含答案
- 2025年执业医师考试综合考试真题卷附答案完整版
- 2025年职业健康考试答题试卷及解析答案
- 2025年中储粮储运有限公司公开招聘笔试参考题库附带答案详解
- 2025年中级审计师《审计理论与实务》真题还原模拟考试题库(含解析)
- 2025年重庆市公开遴选公务员笔试题及答案解析
- 【苏泊尔电器营运资金管理问题及完善分析13000字 (论文)】
- 非遗文化格萨尔文学
- 2022年浙江省宁波市慈溪实验中学高一数学文联考试卷含解析
- 电缆配电线路的运行与维护-电缆敷设
- 武汉市初中学生综合素质评价内容及标准
- 天然气监理规划
- 病理学课件:肿瘤-实验课
- 食品安全管理师理论考试题库及答案
- IS-LM模型-教学讲解课件
- GB/T 8152.2-2006铅精矿化学分析方法铅量的测定硫酸铅沉淀-EDTA返滴定法
- GB/T 20720.3-2022企业控制系统集成第3部分:制造运行管理的活动模型
评论
0/150
提交评论