




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
、 . 我们打败了敌人。 我们把敌人打败了。PackageInstaller 原理简述应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理操作。APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。Android应用安装有如下四种方式1. 系统应用安装开机时完成,没有安装界面2. 网络下载应用安装通过market应用完成,没有安装界面3. ADB工具安装没有安装界面。4. 第三方应用安装通过SD卡里的APK文件安装,有安装界面,由packageinstaller.apk应用处理安装及卸载过程的界面。应用安装的流程及路径应用安装涉及到如下几个目录:system/app 系统自带的应用程序,无法删除data/app用户程序安装的目录,有删除权限。安装时把apk文件复制到此目录data/data存放应用程序的数据Data/dalvik-cache将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)安装过程:复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。目录system/appdata/app拷贝删除apk安装apk卸载监视到文件添加扫描package发布广播消息创建应用的data目录复制dex到dalvik-cache目录一、系统应用安装:PackageManager Service处理各种应用的安装,卸载,管理等工作,开机时由systemServer启动此服务(源文件路径:androidframeworksbaseservicesjavacomandroidserver PackageManagerService.java)ARM 9ARM 11PBLQCSBLOEMSBLAMSSAppsboot.mbnLINUXLoad amss.mbnAMSSRunningHeld in ResetLoad amss.mbnLINUXRunningLoad appsboot.mbnBoot Architecture on MSMTMInitDaemons ProcessesRuntimeZygoteSystem ServerHomeInitDaemonsRuntimeZygoteAudioFlingerSurface FlingerAudioFlingerDalvik VMPackageManagerHomeDalvik VMPackageManager Service服务启动的流程:1. 首先扫描安装“systemframework”目录下的jar包1. scanDirLI(mFrameworkDir, PackageParser.PARSE_IS_SYSTEM, scanMode | SCAN_NO_DEX); 2.第二步扫描安装“systemapp”目录下的各个系统应用scanDirLI(mSystemAppDir, PackageParser.PARSE_IS_SYSTEM, scanMode);3.第三步扫描“dataapp”目录,即用户安装的第三方应用scanDirLI(mAppInstallDir, 0, scanMode);4.第四步扫描 dataapp-private目录,即安装DRM保护的APK文件(目前没有遇到过此类的应用)。scanDirLI(mDrmAppPrivateInstallDir, 0, scanMode | SCAN_FORWARD_LOCKED);安装应用的过程1.scanDirLI(File dir, int flags, int scanMode) 遍历安装指定目录下的文件2.scanPackageLI(File scanFile, File destCodeFile, File destResourceFile, int parseFlags, int scanMode) 安装package文件3.scanPackageLI( File scanFile, File destCodeFile, File destResourceFile, PackageParser.Package pkg, int parseFlags, int scanMode)通过解析安装包parsePackage获取到安装包的信息结构 4.mInstaller.install(pkgName, pkg.applicationInfo.uid, pkg.applicationInfo.uid); 实现文件复制的安装过程(源文件路径:frameworksbasecmdsinstalldinstalld.install)二、从market上下载应用:Google Market应用需要使用gmail账户登录才可以使用,选择某一应用后,开始下载安装包,此过程中,在手机的信号区有进度条提示,下载完成后,会自动调用Packagemanager的接口安装,调用接口如下:public void installPackage(final Uri packageURI, final IPackageInstallObserver observer, final int flags)final Uri packageURI:文件下载完成后保存的路径final IPackageInstallObserver observer:处理返回的安装结果final int flags:安装的参数,从market上下载的应用,安装参数为-r (replace)installPackage接口函数的安装过程:1.public void installPackage( final Uri packageURI, final IPackageInstallObserver observer, final int flags, final String installerPackageName)final String installerPackageName:安装完成后此名称保存在settings里,一般为null,不是关键参数2.File tmpPackageFile = copyTempInstallFile(packageURI, res);把apk文件复制到临时目录下的临时文件3.private void installPackageLI(Uri pPackageURI, int pFlags, boolean newInstall, String installerPackageName, File tmpPackageFile, PackageInstalledInfo res)解析临时文件,获取应用包名pkgName = PackageParser.parsePackageName( tmpPackageFile.getAbsolutePath(), 0);4.判断如果带有参数INSTALL_REPLACE_EXISTING,则调用replacePackageLI(pkgName, tmpPackageFile, destFilePath, destPackageFile, destResourceFile, pkg, forwardLocked, newInstall, installerPackageName, res)5.如果没有,则调用installNewPackageLI(pkgName, tmpPackageFile, destFilePath, destPackageFile, destResourceFile, pkg, forwardLocked, newInstall, installerPackageName, res);6.private PackageParser.Package scanPackageLI( File scanFile, File destCodeFile, File destResourceFile, PackageParser.Package pkg, int parseFlags, int scanMode)scanPackageLI以后的流程,与开机时的应用安装流程相同。三、从ADB工具安装Android Debug Bridge (adb) 是SDK自带的管理设备的工具,通过ADB命令行的方式也可以为手机或模拟器安装应用,其入口函数源文件为pm.java (源文件路径:androidframeworksbasecmdspmsrccomandroidcommandspmpm.java)ADB命令行的形式为adb install ,还可以带安装参数如:-l -r -i -t函数runInstall()中判断参数-lINSTALL_FORWARD_LOCK -r INSTALL_REPLACE_EXISTING -i installerPackageName-tINSTALL_ALLOW_TEST我们常用的参数为-r,表示覆盖安装手机上已安装的同名应用。从market上下载的应用,也是直接传入这个参数安装的。runInstall与market调用同样的接口完成应用安装。public void installPackage(.Uri packageURI, android.content.pm.IPackageInstallObserver observer, int flags, java.lang.String installerPackageName)四、第三方应用安装通过SD卡里的APK文件安装把APK安装包保存在SD卡中,从手机里访问SD卡中的APK安装包,点击就可以启动安装界面,系统应用Packageinstaller.apk处理这种方式下的安装及卸载界面流程,如下图:PackageInstallerActivityInstallAppProgressinstallPackagesendPackageBroadcastUninstallAppProgressUninstallerActivitydeletePackageACTION_PACKAGE_ADDEDACTION_PACKAGE_REMOVED安装卸载installuninstallPackageInstaller.apkframeworkPackageInstallerActivity负责解析包,判断是否是可用的Apk文件创建临时安装文件/data/data/com.android.packageinstaller/files/ApiDemos.apk并启动安装确认界面startInstallConfirm,列出解析得到的该应用基本信息。如果手机上已安装有同名应用,则需要用户确认是否要替换安装。确认安装后,启动InstallAppProgress,调用安装接
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京市公园管理中心所属事业单位招聘94人模拟试卷及参考答案详解1套
- 2025贵州省卫生中心第十三届贵州人才博览会引才考前自测高频考点模拟试题及答案详解(夺冠系列)
- 2025湖南郴州嘉禾县事业单位第一批招聘引进高层次人才和急需紧缺人才13人模拟试卷及答案详解(各地真题)
- 2025金华市教育局所属金华教育学院公开招聘教师6人模拟试卷及参考答案详解一套
- 2025内蒙古金土华维可控农业科技有限公司招聘9名工作人员模拟试卷有答案详解
- 2025内蒙古土地资源收储投资(集团)有限公司常态化招聘50名急需紧缺专业人员的(第十二批)模拟试卷及答案详解(夺冠)
- 2025年中国环保含氟灭火剂行业市场分析及投资价值评估前景预测报告
- 2025年下半年甘肃省事业单位招聘分类考试笔试临夏考区模拟试卷及答案详解(网校专用)
- 2025河南开封市中心医院住院医师规范化培训基地招收模拟试卷及答案详解(考点梳理)
- 2025湖南长沙市开福区望麓园街道社区卫生服务中心公开招聘卫生专业技术临聘人员2人考前自测高频考点模拟试题及答案详解(网校专用)
- 2025版煤矿安全生产标准化管理体系考试题及答案(采煤部分)
- 中国象棋技巧教学课件
- 油田冬季八防安全经验分享
- 电缆拆除专项施工方案
- 数学文化在立体几何中的渗透教学
- 环保设备介绍
- 纤支镜灌洗的术前术后护理讲课件
- 学习通《大学生就业指导》章节测试含答案
- 2025年新高考语文真题全国Ⅰ卷、Ⅱ卷试题汇编(古代诗歌鉴赏、名句名篇默写篇)
- 劳务进度计划
- GB/T 4498.1-2025橡胶灰分的测定第1部分:马弗炉法
评论
0/150
提交评论