Android应用包的生成/管理/访问

APK编译

APK项目的源文件包括:

  1. 资源文件
  2. aidl源文件
  3. Java源文件
  4. Java静态库
  5. Java共享库
  6. 所需的JNI动态库

Java源码在编译前必须首先获得R.java,R.java是编译系统调用aapt工具从res目录下的资源文件编译而成的。

Java源文件 ----javac----> class文件 ----jar----> jar包 ----dx工具----> dex文件 --aapt--> unsigned.apk --signapk.jar--> signed.apk --zipalign边界对齐--> package.apk

签名的目的不是加密,而是认证。

程序包管理

能够根据intent匹配到具体的四大组件。能够把指定的intent转换成一个具体的包含了程序包名称及具体Component名称的信息,以便Java类加载器加载具体的Component。

安装和卸载程序的操作都是由Pms完成,安装程序的过程包括在程序目录下创建以包名称命令的程序文件、创建程序数据目录,以及把程序信息保存到相关的配置文件pakages.xml中,卸载过程则是相反的。

Intent匹配

按照基本的匹配类型定义几个数据变量,比如action、scheme、mime等, 每个数据变量中保存所有只要满足本条件的Component信息。当传入一个Intent时,将intent-filter分解成这些基本的匹配条件,最终找到不同数据变量匹配结果中的交集,即为满足所有字段的条件。

资源访问

资源常见的值一般为以下几种:

  1. String/Color/boolean/int类型:res/values/xxx.xml
  2. Drawable类型:res/drawable/xxx.png
  3. layout
  4. style

LayoutInflater在inflater布局时会通过反射去调用View的(Context context, AttributeSet attrs)构造器。自定义View的第三个和第四个构造函数除非显式调用,不然不会通过xml调用。AttributeSet保存了xml布局文件中View的自定义属性的集合

属性赋值优先级:Xml定义>xml的style定义>defStyleAttr(主题可配置样式)>defStyleRes(默认样式)>NULL(主题中直接指定)。注意,defStyleRes只有在defStyleAttr为0或者主题中没有配置时,才会生效;

APK是一种具有安装格式的文件,安装后将是另一个样子。

一个应用程序的多个ContextImp对象实际共享了一个PakageInfo对象。
Assetmanager并不只是访问项目中的res/assests目录下的资源,而是访问应用程序本身res下所有的资源,以及Framework的资源路径。

系统资源的id值都是以0x01开头,一般的应用程序的资源值是以0x07开头。

你可能感兴趣的:(Android应用包的生成/管理/访问)