Android对的Apk安装过程经历了什么?
Apk安装的主要分为五大步骤:
-
将apk文件复制到data/app目录
- 使用PackageManager的installPackage接口
- 之后调用installPackageAsUser。installPackageAsUser方法中主要完成两件事情。
- 是权限检查
- 是构建InstallParams,然后发送INIT_COPY的msg,这个mHandler运行在一个HandlerThread中,INIT_COPY主要是确保DefaultContainerService已bound,DefaultContainerService是一个应用服务,具体负责实现APK等相关资源文件在内部或外部存储器上的存储工作。而MCS_BOUND中则执行
params.startCopy() - HandlerParams.startCopy该方法中除了检查重试次数外只是简单的调用了handleStartCopy()及handleReturnCode()方法。
-
解析apk信息
- copy到data/app目录的操作后,就到了 handleReturnCode,这个方法又跳转到processPendingInstall()方法
- 这个方法有几个关键步骤,一是installPackageLI(args, res);,这个方法具体执行了解析package和后续操作,而再installPackageLI(args, res);执行完毕后会走到bm.restoreAtInstall(res.pkg.applicationInfo.packageName, token);,会调用backupservice的restoreAtInstall方法,而restoreAtInstall方法最终又会调用PMS的finishPackageInstall()方法,完成安装。
-
dexopt操作
-
更新权限信息
-
完成安装,发送广播(Intent.ACTION_PACKAGE_ADDED)