Android APK的生成流程

第一次接触写Android APP, 不是太清楚Eclipse和AS自动化的的工作后面发生了什么,所以拜读老罗/炸斯特/Android Docs文章后,基于Android M上做个实践总结。
1. 重点是APK的生成流程。
2. Android APP的代码结构是这个流程起始的地方,它决定了APK生成的流程怎么走。
3. 整个流程的结果是一个APK以及对应的odex。

Android APP的代码结构

通常一个APP的目录下包含如下内容:
AndroidManifest.xml: 提供packagename, components list, API Level, used libraries, permissions, etc. 这些信息以后PMS会用到。
Android.mk: 告知Android buid system哪些java/res/asset文件需要被处理,以及对处理的过程做配置制。本文件将决定后续的APK生成流程怎么走。
src: 本目录下通常包含java/aidl/c++/c代码,本文着重java和aidl代码;
res: 本目录下通常包含可以根据resource ID 进行索引的资源,打包进apk之前会被编译优化;
assets: 本目录下通常包含只能根据文件名来索引的raw资源,打包进apk之前不会被编译优化;

将代码和资源分开是国际惯例,好处可以baidu/google。

Android APK 的生成流程

M上的虚拟机已经默认使用ART, 另外默认编译采用JackNJill,由于JackNJill把javac/proguard/dex的工作一步做了,为了弄明白细节,本文后续只讨论JackNJill disable并且生成odex的过程。(在Android.mk 里加上LOCAL_JACK_ENABLED := false)。

具体过程参见代码: build/core/package.mk

大体流程:
Android APK的生成流程_第1张图片

典型的Android APK构成

Android APK的生成流程_第2张图片

你可能感兴趣的:(Android)