您当前的位置: 首页 >  面试
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

面试:APK安装的过程

沙漠一只雕得儿得儿 发布时间:2021-12-14 12:17:52 ,浏览量:0

主要步骤列出来:
  1. 向PMS的handler发送INIT_COPY信息,将apk文件复制到data/app目录,顺便进行空间和权限检查;
  2. 解析apk信息,进行签名校验、检查是否和已有的ContentProvider冲突、四大组件注册;
  3. dexopt操作,installd进行在安装过程中进行预编译,针对dex的opt(Dalvik虚拟机)或者oat(ART虚拟机)的优化
  4. 更新权限信息,并判定是否授予该app请求的权限
  5. 完成安装,发送Intent.ACTION_PACKAGE_ADDED广播

 

1. 将apk文件copy至data/app目录

1.1 安装来源,包括adb,shell,all_user,然后向PMS的mHandler发送INIT_COPY的消息

1.2 handleStartCopy的核心就是copyApk,顺便进行存储空间检查,权限检查等等安全校验

2 .解析apk信息

完成apk copy到data/app目录的操作后,

2.1、执行processPendingInstall()方法,这个方法先是解析了package包,然后做了大量签名和权限校验的工作

2.2、执行installNewPackageLI(),这个方法主要完成:

  • 设置系统App的一些参数
  • 校验签名
  • 解析app的provider,校验是否与已有的provider冲突
  • 32/64位abi的一些设置
  • 四大组件的解析,注册
3. dexopt操作

Apk文件其实只是一个归档zip压缩包,而我们编写的代码最终都编译成了.dex文件,但为了提高运行性能,android系统并不会直接执行.dex,而是会在安装过程中执行dexopt操作来优化.dex文件,最终android系统执行的时优化后的'odex'文件(注意:这个odex文件的后缀也是.dex,其路径在data/dalvik-cache)。对于dalvik虚拟机,dexopt就是优化操作,而对于art虚拟机,dexopt执行的则是dex2oat操作,既将.dex文件翻译成oat文件。

最终守护进程installd会调用Commands.c文件(位于/source/framework/native/cmds/installd)的dexopt方法。

installd在做了些操作后,fork出了一个新的进程,根据虚拟机的类型为libdvmlibart分别执行run_dexoptrun_dex2oat(如果为is_patchoat,则是run_patchoat)操作。

4. 更新权限信息

dexopt操作执行完后,installNewPackageLI()方法就会走到updateSettingsLI()来更新设置信息,而更新设置信息主要是权限信息,所以直接来看updatePermissionsLPw();

在apk的安装时PMS会将该app的所有权限都记录下来并更新到PMSmAppOpPermissionPackages成员变量里面,并判定是否授予该app请求的权限。

5.完成安装

调用PMSfinishPackageInstall方法,而此方法最终会发送Intent.ACTION_PACKAGE_ADDED广播,apk的安装就到到此结束了。

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0372s