initView()
res0
进入switch的INIT_COPY条件,再进入MCS_BOUND条件
PackageInstallerActivity。onCreate()
是
scanDirLI(...)
InstallAppProgress.onCreate()
createDataDirsLI(pkgName...)
mPm.installPackageWithVerificationAndEncryption()
调用processPendingInstall()方法
调用scanDirLI扫描的内容
doHandleMessage(msg)
判断信息是否有错后,调用initiateInstall()
调用HandlerParams 类的startCopy()方法
mInstaer接管之后,通过socket方式,交给底层的installd去处理了
入口2从网络下载APK自动安装
该方法做具体事情
int res = mInstaller.createUserData()
各种验证(签名等)将上一步解析的到的信息保存到PKMS中,方便给AMS调用
mPm.installPackageWithVerificationAndEncryption()
PackageManagerService构造函数
执行installNewPackageLI或者replacePackageLI
调用Packagemanager的installPackage()方法
入口4从SD点击安装APK
android\\frameworks\\base\\cmds\\pm\\src\\com\\android\\commands\\pm\\pm.java
入口3adb安装APK
mHandler发送INIT_COPY消息
int res = mInstaller.install()
执行installPackageLI()方法
调用runInstall()方法
PKMS.installPackageWithVerificationAndEncryption()
return res ;
调用startInstallConfirm()
进入PackageHandler的handleMessage方法
调用PackageManagerService的installPackage()方法
调用handleReturnCode()方法
该方法的几项重要工作:1.建立ResolverActivity的内存对象就是当发出一个Intent,如果有多个Activity响应该Intent的Activity,会弹出一个对话框让用户选择,这个对话框就是ResolverActivity。2.处理带有original-package标签的应用3.校验签名(verifySignaturesLP)4.检查ContentProvider名称5.确定应用将来的进程名称6.创建应用的数据目录7.安装动态库8.重新优化dex9.提取应用中的组件信息到PackageManagerService的成员变量中。
前三步创建并显示安装界面点击OK按键,根据Intent跳转到InstallAppProgress
Android应用4中安装方式的执行流程
入口1开机启动安装APK