Android 开发者对于apk再熟悉不过了,但是对于apk是如何生成的,它的打包流程是什么可能还不是很了解。
当然无论是早期Ant或者是目前主流的gradle其实原理以及大致步骤都是一样的。先看下官网的流程图:
主要包括两个过程:
1,编译过程,编译的内容包括本工程的文件以及依赖的各种库文件,编译的输出包括dex文件和 编译后的资源文件。
2,打包过程。配合Keystore对第一步的输出进行签名对齐,生成最终的apk文件。
上图的具体步骤如下:
1,Java编译器对工程本身的java代码进行编译,这些java代码有三个来源:app的源代码,由资源文件生成的R文件(aapt工具),以及有aidl文件生成的java接口文件(aidl工具)。产出为.class文件。
2,.class文件和依赖的三方库文件通过dex工具生成Delvik虚拟机可执行的.dex文件,可能有一个或多个,包含了所有的class信息,包括项目自身的class和依赖的class。产出为.dex文件。
3,apkbuilder工具将.dex文件和编译后的资源文件生成未经签名对齐的apk文件。这里编译后的资源文件包括两部分,一是由aapt编译产生的编译后的资源文件,二是依赖的三方库里的资源文件。产出为未经签名的.apk文件。
4,分别由Jarsigner和zipalign对apk文件进行签名和对齐,生成最终的apk文件。
总结为:编译-->DEX-->打包-->签名和对齐
这篇文章对打包有更加细致的解读: