APK解析
Android是如何启动App的?
点击屏幕上的图标,然后一个Activity就启动了,这个过程中,桌面Launcher先向AMS进程发送一个intent,AMS把这个intent发给PMS,PMS解析这个intent得到Activity的信息返回给AMS,AMS启动一个空进程,通知进程创建这个Activity,那么PMS为什么会有这个Activity的信息呢?
这就是PMS解析APK要做的事情了,而解析APK的时机又要分成两种场景:
- 系统启动时解析APK
Android系统在启动的时候,会启动一个system_server进程,这个进程驻留着系统多个重要的服务,其中便包含了与APK最相关的PackageManagerService服务,这个服务在启动的时候,会扫描Android系统中几个目标文件夹中的APK,对每个APK进行解析。 - 安装过程中解析APK
安装一个apk的过程,PMS也会对这个APK进行解析,其调用的是PackageManagerService.java的scanPackageLI()方法,其实在系统启动时扫描全部apk的过程也是调用该方法。
可以这样理解,系统启动的时候,是解析已经安装的所有APK,而安装单个APK时,则是用同样的方法解析这个APK,过程是一样的。
解析APK具体做的是什么事情呢?
其中主要的过程就是解析APK中的AndroidManifest.xml文件,将APK的关键信息四大组件信息、权限信息等存储在内存中的PackageParser对象中,PackageParser对象的结构如图所示: