返回

Android系统服务PMS 包的解析过程(三)

Android

一、背景

包的形式有各种各样的包,如 xx.apk、xxx.jar、xx.so。PMS作为包的管理中心,管理Android中各种各样的包。 而管理是需要在内存中才能进行的,因此,如何把静态形式的数据转

二、Apk 包的解析过程

在知道PMS如何存储和管理包的知识清单后,我们再接着谈,PMS是如何解析包的。

1、校验

PMS在解析Apk包时,首先会检查包是否满足以下条件:

(1)包是否已经安装?

(2)包是否已损坏?

(3)包是否合法?

若以上三项检查全部通过,PMS才会继续解析包。

2、解析 Apk 包

PMS 在解析 Apk 包时,会用到如下三个工具:

(1)AXMLPrinter

AXMLPrinter 是一个类,负责将 Apk 包中的二进制 AXML 文件解析成 xml 格式。

(2)ResourceTypes

ResourceTypes 是一个类,负责将 AXML 文件中的 xml 格式解析成二进制格式,并存储在内存中。

(3)AndroidManifest.xml

AndroidManifest.xml 是 Apk 包中的一个重要文件,包含了 Apk 包的基本信息,如包名、版本号、权限等。

3、解析 AndroidManifest.xml

PMS 在解析 AndroidManifest.xml 时,会先使用 AXMLPrinter 类将二进制 AXML 文件解析成 xml 格式,然后再使用 ResourceTypes 类将 xml 格式解析成二进制格式,并存储在内存中。

4、解析包中的资源

PMS 在解析包中的资源时,会先使用 AXMLPrinter 类将二进制 AXML 文件解析成 xml 格式,然后再使用 ResourceTypes 类将 xml 格式解析成二进制格式,并存储在内存中。

5、解析包中的代码

PMS 在解析包中的代码时,会先使用 Dex 文件解析器将 Dex 文件解析成 Dalvik 字节码,然后再使用 Dalvik 虚拟机将 Dalvik 字节码解析成机器码,并存储在内存中。

6、安装包

PMS 在解析完包之后,会将包安装到系统中。包的安装过程包括:

(1)将包复制到系统的安装目录中。

(2)在系统的数据库中创建一条新的记录,记录包的基本信息,如包名、版本号、权限等。

(3)将包中的资源文件复制到系统的资源目录中。

(4)将包中的代码文件复制到系统的代码目录中。

三、总结

PMS在解析包时,主要做了以下几件事:

(1)校验包的合法性。

(2)解析 Apk 包。

(3)解析 AndroidManifest.xml。

(4)解析包中的资源。

(5)解析包中的代码。

(6)安装包。

通过上述操作,PMS 就完成了对包的解析和安装。