平时在开发调试的时候用pm指令用得蛮多的,pm指令可以列出系统支持的feature、permission和当前已安装的apk等信息。所以今天我们来阅读一下pm指令的代码,做下简单分析。 Android.mk 首先我们来查看一下编译pm指令的Android.mk,看看pm指令包含哪些源码文件。Android.mk文件路劲为frameworks/base/cmds/pm [crayon-62bcc856ed8fc171491022/] pm指令源码 &emsp…
平时在开发调试的时候用pm指令用得蛮多的,pm指令可以列出系统支持的feature、permission和当前已安装的apk等信息。所以今天我们来阅读一下pm指令的代码,做下简单分析。 Android.mk 首先我们来查看一下编译pm指令的Android.mk,看看pm指令包含哪些源码文件。Android.mk文件路劲为frameworks/base/cmds/pm [crayon-62bcc856ed8fc171491022/] pm指令源码 &emsp…
上一篇我们讲到在PackageInstallerSession的commitLocked方法中,我们最后调用了PackageManagerService的installStage方法。这里我们直接从 PackageManagerService.java installStage [crayon-62bcc856f033c708186886/] 上面的代码中,在最后我们向mHandler发送了INIT_COPY,接下来我们分析mHandler是如何处理INIT_COPY…
上一篇讲到如果允许安装未知源程序,并且应用属于未知源程序,就会调用initiateInstall进行安装,而initiateInstall最后会调用startInstallConfirm进行安装确认。这一篇就从startInstallConfirm方法开始讲解。 PackageInstallerActivity.java [crayon-62bcc856f1a46057509766/] 上面安装应用的界面大致如下,升级应用或者应用不需要额外权限的界面大致类似,只是提示…
前言 前面两篇文章简单讲述了PackageManagerService的启动过程,和APK安装的内容一直都没有涉及到。APK可以通过多种方式安装,例如通过adb install安装、系统开机会默认安装系统应用、将apk放到手机通过PackageInstaller交互安装等等。安装APK的方式很多,但是这里选择用户使用最多的安装方式进行讲解,即通过PackageInstaller交互式安装。PackageInstaller是Android系统的默认程序,源码路劲为packages/app/Pa…
这里接着上一篇开始写,上一篇只是讲了在startBootstrapServices中启动PackageManagerService部分的代码,剩余的在startOtherServices中PackageManagerService相关设置操作没有分析到,这一篇接着分析下面遗留的问题: mPackageManagerService.updatePackagesIfNeeded mPackageManagerService.performFstrimIfNeeded mPackageManage…
略久没有写自己写博客了,现在要重新抓起来。最近对Android Framework的内容感兴趣,所以接下来可能会阅读下Framework部分的代码,Android系统部分的代码有机会也会分析分析。今天就先来看看PackageManager和PackageManagerService好了。 一. 简述 PackageManagerService(PKMS)和PackageManger(PKM)的关系如下图,PKMS是Android系统中核心服务之一,负责package的相关工作,例如安装,卸载…