下图的是官网对于Android编译打包流程的介绍。
官方的介绍非常笼统,简而言之,其大致流程就是:
编译-->DEX-->打包-->签名和对齐
(好像什么都没Get到,有一种意犹未尽的感觉……)
来一张外国大神的图片(注:这张图少了签名的步骤)
用文字解释一下上图的流程:
首先,我们整理一下编译的输入部分是什么(图中黄色部分):
接下来的步骤:
好了,编译打包的详细流程说完了,接下来我们看看是否能回答开篇的那些问题。
答:aapt工具对于每个资源文件生成了唯一的ID,这些ID保存在R.java文件中。如下是R.java文件的内容:
资源ID是一个4字节的无符号整数,在R.java文件中用16进制表示。其中,最高的1字节表示Package ID,次高1个字节表示Type ID,最低2字节表示Entry ID。
只有一个ID如何能引用到实际资源呢?实际上aapt工具还生成了一个文件resources.arsc,相当于一个资源索引表,或者你理解成一个map也行,map的key是资源ID,value是资源在apk文件中的路径。resources.arsc里面还有其他信息,这个就不多说了。
通过R.java文件和resources.arsc配合,就能引用到实际的资源文件。
答:第7步已经阐述了对齐所做的工作,为什么要进行对齐,这是为了加快资源的访问速度。如果每个资源的开始位置都是上一个资源之后的 4*n字节,那么访问下一个资源就不用遍历,直接跳到4*n字节处判断是不是一个新的资源即可。
如果举例子,那么对齐有点类似于资源数组化,数组的访问速度当然比链表快。
答:xml里面都是各种字符,不利于快速遍历。编译成二进制文件,用数字替换各种符号,一方面能快速访问,另一方面也能减少大小。
https://developer.android.com/studio/build/index.html
http://www.alittlemadness.com/2010/06/07/understanding-the-android-build-process/
http://blog.csdn.net/luoshengyang/article/details/8744683
https://stackoverflow.com/questions/6517151/how-does-the-mapping-between-android-resources-and-resources-id-work
http://www.jianshu.com/p/eaaddfe34d11
2. 如何加快Android Studio的编译速度
作为一名Android程序员,选择一个好的IDE工具可以使开发变得非常高效,很多程序员喜欢使用Google的AndroidStudio来进行开发,但使用起来有时会出现卡顿等问题。本文介绍了几种优化AndroidStudio启动、编译、运行速度的方法。首先解决一个AndroidStudio启动报错的问题1、进入刚安装的AndroidStudio目录下的bin目录。找到idea.properties文件,用文本编辑器打开。2、在idea.properties文件末尾添加一行:disable.android.first.run=true,然后保存文件。3、关闭AndroidStudio后重新启动,便可进入界面。优化AndroidStudio启动速度1、开启gradle单独的守护进程当AndroidStudio遇到错误的时候,往往会导致AndroidStudio挂掉,为了防止推出程序,则另外开启一个线程来守护AndroidStudio的进程,具体操作。在C:\Users\.gradle这个目录下,创建gradle.properties配置文件,复制以下配置进行优化。#Project-wideGradlesettings.org.gradle.daemon=trueorg.gradle.jvmargs=-Xmx2048m-XX:MaxPermSize=512m-XX:+HeapDumpOnOutOfMemoryError-Dfile.encoding=UTF-8org.gradle.parallel=trueorg.gradle.configureondemand=true这些配置文件主要就是增大gradle运行的java虚拟机的大小,让gradle在编译的时候使用独立进程,让gradle可以很好的运行。2、扩大内存64位:\studio64.exe.vmoptionsorstudio.exe.vmoptions32位:\studio.exe.vmoptionsorstudio.exe.vmoptions编辑这个文件,在最开始的两行设置内存大小,类似于eclipse.ini中的配置。配置如下:-Xms256m-Xmx1024m3、优化编译时VM大小选择file->setting->compile添加如下参数:-Xmx1024m-XX:MaxPermSize=128m-XX:+HeapDumpOnOutOfMemoryError-Dfile.encoding=UTF-8具体参数大小视电脑配置而定。经过测试,编译速度有很大提升,比较大的项目从之前的5-8分钟可以减少到1-2分钟。OneAPMMobileInsight能够实时监测移动应用的真实用户体验,通过Agent实现端到端的应用性能分析。帮助用户提高发现应用问题的速度。并且可以深入到代码级进行应用性能问题剖析,通过可视化界面展示智能移动终端的实时运行状态。
3. 如何加快Android Studio 编译app 的速度
以下几个方法可以提高Android Studio的编译速度:
使用Gradle 2.4。
Gradle 2.4对执行性能有很大的优化,要手动让Android Studio使用Gradle 2.4,在项目根目录下的 build.grade中加入。
4. 如何提高android.mk的编译速度
从eclipse转到Android studio,总觉得编译速度或者安装到手机上的速度会变很快,现实是仍然很慢,所以就搜如何提高build速度,安装真机上apk能快一点,步骤如下:
1.修改android studio的使用堆内存,根据自己电脑的内存,尽量设置的大一点,点击help->如下图:
2.接下来设置使用离线gradle构建,一开始就是使用了内置的默认路径gradle,勾选offline这个选项,编译的速度快的不止一点点,在.gradle的离线位置,建立一个gradle.properties的文件,设置精灵后台一直编译,这样提高了很多的速度