Andrioid 编译系统是你用于build,test,runapp的工具箱。编译系统的运行,可以通过Android Studio的菜单或者是独立的命令行。通过编译系统的特性你可以做以下的事情:
(1) 自定义,配置,扩展编译进程。
(2) 用同一个project and modules创建拥有不同特性的apk。
(3) 通过来源设置重用代码和资源。
Android编译系统的自由性,能够在不修改您应用程序的核心源文件的基础上实现您想要的一切。
如何使用Android Studio 编译项目,请看我的下一篇文章Build And Running From Android studio。
如何自定义编译配置,请看我的下一篇文章:configuringgradle builds。
A Detailed Look atthe Build Process
编译进程包含了许多的工具和进程,这些使得在编译apk的过程中会生成很多中间文件。如果你在Android studio中开发,每次当你为你的app运行Gradle编译任务的时候,整套的编译过程就会被执行。编译系统的自由性使它有益,但是,因为大部分的构建过程是可配置的和可扩展的,所以我们要了解在这之下到底发生了什么。下图描述了在构建中涉及的不同的工具和过程:
一个经典的构建过程一般如下:编译系统对比合并所有的已配置的 product Flavors,build types,dependencies。如果在不同的文件夹中包含同样名字的资源或者设置,那么生效的优先级顺序是:dependencies 覆盖build types,build types 覆盖product flavors,product flavors 覆盖main sources 目录。
(1) aapt 全称AndroidAsset packaging tool。该工具获取应用的资源文件,例如,AndroidManifest.xml,Activities的xml文件,并且编译它们。R.java文件被生成,所以你能将你的资源文件id在java code中使用。
(2) aidl工具转化你在java代码中引入的所有的.aidlinterface。
(3) 所有的java code,包含R.java和.aidl将被java compiler工具编译,然后生成.class文件。
(4) dex工具转换.class文件成为Dalvikbyte code。任何的第三方库和.class文件也都会被转换成.dex文件。以至于最后它们能被打包成.apk文件。
(5) 未被编译的资源如图片,已被编译的资源,.dex文件都会被发送到apkbuilder工具,从而生成apk。
(6) 一但apk被构建,那么在安装到设备之前,它一定要被签名,要么是debug要么是release。
(7) 一但apk是release的,那么一定要使用zip以align工具,它可以减少apk运行时所占用的内存。
注释:apk中的方法数是有限制的,不可以超过65535.具体的解决办法:请参考我的文章:Apps over 64K Methods。
作者有话说:如果您需要Android中文API,请扫一扫下面的二维码,您的关注,就是我的动力,最技术,我们认真的。