Android开发 —— apk打包流程

0. 前言

apk 全称是Android应用程序包(Android application package),一种能被Android系统识别并运行的文件格式。

apk 文件基于 zip 文件格式,它与 jar 文件的构造方式相似。


在总结 apk 的打包流程之前,先要了解一下一个 apk包 究竟有哪些文件:

  • classes.dex 文件:java源文件经过编译和转换后生成的二进制的字节码文件。
  • resource.arsc 文件:经过 aapt 编译后的二进制的资源文件。
  • AndroidManifest.xml 文件:经过 aapt 编译后的二进制的 xml 文件。
  • res 文件夹:除图片和 res/raw 文件夹下的文件外,其余的 xml 文件都被 aapt 编译成二进制的 xml 文件。
  • assets 文件夹(可选):存放不进行编译的原生文件,可以是一些图片,或者是html、js、css文件。
  • lib 文件夹(可选):存放应用程序依赖的 native 库文件,一般是用 c/c++ 编写,如 so 文件。
  • META-INF 文件夹:存放签名信息。


1. 官方流程图

Android开发 —— apk打包流程_第1张图片


2. apk 的打包流程

Android Studio中,打包工具主要位于 sdk/build-tools/版本号/ 目录下。


#1 打包资源文件,生成相应的 R.java 文件

【工具】aapt(Android Asset Package Tool)

【输入】res 文件夹,assets 文件夹,AndroidManifest.xml 文件

【输出】R.java,二进制的 resource.arsc ,res 文件夹(包括二进制的 xml 文件以及 没有改变的图片和 res/raw 下的文件),

没有改变的 assets 文件夹,二进制的 AndroidManifest.xml 文件


#2 处理 aidl 文件,生成相应的 java 文件

【工具】aidl(Android Interface Denifition Language)

【输入】aidl文件

【输出】相应的 java 接口文件


#3 编译所有的 java 文件,生成 class 文件

【工具】javac(java 编译器)

【输入】R.java,java接口文件,java源文件

【输出】class文件


#4 把class文件转换成dex文件

【工具】dx.bat

【输入】class文件,第三方库文件.jar(jar包中大都是class文件)

【输出】classes.dex文件


#5 打包生成apk文件

【工具】apkbuilder(主要用到的是sdk/tools/lib/sdklib.jar文件中的ApkBuilderMain类)

【输入】resource.arsc文件,AndroidManifest.xml文件,res文件夹,assets文件夹,classes.dex文件

【输出】apk文件


#6 对apk文件进行签名

【工具】apksigner

【输入】未签名的apk文件

【输出】签名的apk文件


#7 对签名后的apk文件进行对齐处理

【工具】zipalign

【输入】签名的apk文件

【输出】最终的apk文件

注:如果是release版本,需要对apk文件进行对齐处理。

对齐处理使得apk包中的所有资源文件距离文件起始偏移为4字节整数倍,这样通过内存映射访问apk文件时的速度更快,同时减少运行时内存的使用。


3. 详细流程图
Android开发 —— apk打包流程_第2张图片


你可能感兴趣的:(Android)