单击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"消息,接收后发送安装成功广播

更多相关文章

  1. android发送post请求出现问题
  2. Android(安卓)NDK-r4 sample--准备(一)
  3. 升级Android(安卓)ADT 和SDK
  4. 详解 Android(安卓)的 Activity 组件
  5. Android(java)学习笔记86:案例短信发送器
  6. Android(安卓)IPC 通讯机制源码分析 二
  7. Android的IPC机制Binder的详解(转发)
  8. location of the android sdk has not been setup in the prefer
  9. Android(安卓)无线启动过程分析 无线启动过程分析

随机推荐

  1. c语言fopen函数的用法
  2. 手把手教你C#中指针的使用方法
  3. typedef在c语言中是什么意思
  4. c语言换行符号是什么
  5. c语言中\t是什么意思
  6. 史上最佳的C#编程书籍推荐
  7. &&在C语言中是什么意思
  8. c++标识符命名规则
  9. c语言中将一个字符串转换到整型数据类型
  10. c语言整除符号是什么?