Android APK文件安装过程小结

单击apk文件,系统发送intent,packageInstallActivity进行接收
1.packageinstallActivity
   onCreate()  获取intent内容,识别scheme,
   -->调用PackageUtil.getPackageInfo获取相关apk的资源信息和清单信息
   -->调用initiateInstall()判断包名是否重复
    -->调用startInstallCOnfirm(),获取权限信息,并绘制权限视图及按钮
 ,单击确定按钮时跳转至InstallAppProgress
2.InstallAppProgress
  onCreate()  获取intent内容,识别scheme
  -->调用initView()  设置界面视图,调用PackageManager的intallPackageWithVerficationAndEncryPtionAndENcryption方法安装
 packageManage会调用packageManagerService的insatll...AndEncryption方法
3.install...AndEncryption()根据uid判断是否为ADB安装,同时packagehandler发送INIT_COPY消息
  ->调用doHandleMessage处理,判断是否绑定ContainerService,绑定后,将相关参数信息添加到PendingInstall列表,并发送MCS_BOUND消息,
  ->dohanleMessage处理MCS_BOUND,解析参数HandlerParams,调用其startCopy(),同时如果列表不为空,继续发送MCS——BOUND消息
       --->startCopy()判断处理次数,调用handleStartCopy(),判断安装位置,计算内部存储大小,安装drm,计算安装包大小,当内存不足时释放存储空间,最终确定相关状态。建立InstallArgs对象(FileInstallArgs/AsecINstallArgs),并调用copyApk()
               ---> copyApk():
                     -->1.FileInstallArgs:调用CreateCopyFIle()『在/data/app下创建一个以"vmdl"开始,并以".tmp"结尾的临时文件,获取该文件路径名以及/data/app-lib/vmdl**路径』,并将源文件复制到临时文件中,将其中库文件拷贝到app-lib/vmdl**中
    -->2.AsecInstallArgs
               --->调用handleReturnCode(),其中调用processPendingInstall()
processPendingInstall()
                    -->installPackageLI(),解析清单文件信息,调用rename()和installnewPackageLI()
                                   -->doRename(),将.tmp等临时文件及路径更名。例如包名-num.apk
                                   -->installnewpackageLI(),将新的package文件里面的资源加入到PMS的数据结构中,让PMS来管理这些activity、service、receiver
-->scanPackageLI()把新package的资源归入到PMS中,并创建一个PackageSettings对象,加入到Settings中的mPackages这个map中
                                                   -->createDataDirsLI(),创建data目录
-->installer.install()调用installd.install()先构造几个目录名:pkgdir为/data/data/包名,libsymlink为/data/data/包名/lib,applibdir为/data/app-lib/包名。然后创建pkgdir的目录,并修改相应的权限。然后创建/data/data/包名/lib指向/data/app-lib/包名的符号链接
  -->performDexOptLI()对APK安装包中的dex文件做优化
      -->updateSettingsLI去更新Settings中的设置
      -->发送"POST_INSTALL"消息,接收后发送安装成功广播
                             
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值