美文网首页
APK打包过程

APK打包过程

作者: 第八区 | 来源:发表于2017-09-01 15:49 被阅读34次

Android

官方配置构建介绍
aapt命令介绍
参考老罗的文章

build-process_2x.png

再来一张详细的图

build.png

aapt打包过程

aapt.jpg

1. 解析AndroidManifest.xml,创建ResourceTable对象

uml.png

2. 添加被引用资源包

Android系统定义了一套通用资源,这些资源可以被应用程序引用。例如,我们在XML布局文件中指定一个LinearLayout的android:orientation属性的值为“vertical”时,这个“vertical”实际上就是在系统资源包里面定义的一个值。

3. 收集资源文件

在编译应用程序资源之前,Android资源打包工具aapt会创建一个AaptAssets对象,用来收集当前需要编译的资源文件。这些需要编译的资源文件就保存在AaptAssets类的成员变量mRes中

4. 将收集到的资源增加到资源表

前面收集到的资源只是保存在一个AaptAssets对象中,这一步需要将这些资源同时增加到一个资源表中去,即增加到前面所创建的一个ResourceTable对象中去,因为最后我们需要根据这个ResourceTable来生成资源索引表,即生成resources.arsc文件

5. 编译values类资源

6. 给Bag资源分配ID

类型为values的资源除了是string之外,还有其它很多类型的资源,其中有一些比较特殊,如bag、style、plurals和array类的资源。这些资源会给自己定义一些专用的值,这些带有专用值的资源就统称为Bag资源。例如,Android系统提供的android:orientation属性的取值范围为{“vertical”、“horizontal”},就相当于是定义了vertical和horizontal两个Bag。

7.编译Xml资源文件

xml.jpg
7.1 解析Xml文件
7.2 赋予属性名称资源ID
7.3 解析属性值
7.4 压平Xml文件
  • 7.4.1 收集有资源ID的属性的名称字符串
  • 7.4.2 收集其它字符串
  • 7.4.3 写入Xml文件头
  • 7.4.4 写入字符串资源池
  • 7.4.5 写入资源ID
  • 7.4.6 压平Xml文件
压平.jpg

8. 生成资源符号

9. 生成资源索引表

9.1 收集类型字符串
9.2 收集资源项名称字符串
9.3 收集资源项值字符串
9.4 生成Package数据块
  • 9.4.1 写入Package资源项元信息数据块头部
  • 9.4.2 写入类型字符串资源池
    在前面的第1个操作中,我们已经将每一个Package用到的类型字符串收集起来了,因此,这里就可以直接将它们写入到Package资源项元信息数据块头部后面的那个数据块去。
  • 9.4.3 写入资源项名称字符串资源池
    在前面的第2个操作中,我们已经将每一个Package用到的资源项名称字符串收集起来了,这里就可以直接将它们写入到类型字符串资源池后面的那个数据块去。
  • 9.4.4 写入类型规范数据块
  • 9.4.5 写入类型资源项数据块
  • 9.4.6 写入资源项的值字符串资源池
  • 9.4.7 写入Package数据块
resources.jpg

10. 编译AndroidManifest.xml文件

经过前面的九个步骤之后,应用程序的所有资源项就编译完成了,这时候就开始将应用程序的配置文件AndroidManifest.xml也编译成二进制格式的Xml文件。之所以要在应用程序的所有资源项都编译完成之后,再编译应用程序的配置文件,是因为后者可能会引用到前者。

11. 生成R.java文件

12. 打包APK文件

  • assets目录
  • res目录,但是不包括res/values目录, 这是因为res/values目录下的资源文件的内容经过编译之后,都直接写入到资源项索引表去了
  • 资源项索引文件resources.arsc
  • AndroidManifest.xml
  • 应用程序代码文件classes.dex
  • 应用程序的签名信息的文件

相关文章

  • android apk打包过程

    具体请参考:android Apk打包过程概述_android是如何打包apk的

  • apk打包过程

    1.使用aapt打包res资源文件,生成R.java,resources.arsc(资源映射信息)以及其他re​s...

  • APK打包过程

    Android 官方配置构建介绍aapt命令介绍参考老罗的文章 再来一张详细的图 aapt打包过程 1. 解析An...

  • APK打包过程

    前言 HI,欢迎来到裴智飞的《每周一博》。今天是一月第二周,我给大家介绍下APK的打包过程。这篇文章是在上一篇《A...

  • Android逆向工程

    分析APK文件 要分析APK文件,首先要了解APK打包过程 打包资源文件(aapt)检查Manifest合法性将r...

  • 安卓学习-APK打包与应用安装

    APK打包和安装之间有着千丝万缕的联系。APK打包就是将程序中的各种文件处理,压缩的过程;应用安装就是对APK解压...

  • Android Apk打包过程

    概述Apk其实是一个压缩包,当解压后,其内部主要就是资源文件和classes.dex。这个classes.dex文...

  • Android反编译技术总结

    一、Apk反编译工具及其使用方法 1.原理 学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后的Apk...

  • Android APK 加固重新签名

    APK 加固流程 打包APK 通过 ./gradlew assembleRelease 命令打包,此时的apk没有...

  • Flutter macOS Android打包

    GitHub地址 打包过程视频预览 对于macOS用户使用flutter build apk打包可为曲折,官方只给...

网友评论

      本文标题:APK打包过程

      本文链接:https://www.haomeiwen.com/subject/giqkjxtx.html