android项目构建过程

平时开发过程当中咱们经过android studio编写完成android项目以后直接点击 Run ‘app’就能够在build/outputs/apk生成能够在android设备中安装的apk文件了,那么整个android源码的构建过程是怎么样的呢?java

咱们能够根据Google官方提供的流程图来具体了解构建的过程:
这里写图片描述android

一般的构建过程就是如上图所示,下面是具体描述:app

1.AAPT(Android Asset Packaging Tool)工具会打包应用中的资源文件,如AndroidManifest.xml、layout布局中的xml等,并将xml文件编译为二进制形式,固然assets文件夹中的文件不会被编译,图片及raw文件夹中的资源也会保持原来的形态,须要注意的是raw文件夹中的资源也会生成资源id。AAPT编译完成以后会生成R.java文件。dom

2.AIDL工具会将全部的aidl接口转化为java接口。编辑器

3.全部的java代码,包括R.java与aidl文件都会被Java编译器编译成.class文件。函数

4.Dex工具会将上述产生的.class文件及第三库及其余.class文件编译成.dex文件(dex文件是Dalvik虚拟机能够执行的格式),dex文件最终会被打包进APK文件。工具

5.ApkBuilder工具会将编译过的资源及未编译过的资源(如图片等)以及.dex文件打包成APK文件。布局

6.生成APK文件后,须要对其签名才可安装到设备,平时测试时会使用debug keystore,当正式发布应用时必须使用release版的keystore对应用进行签名。性能

7.若是对APK正式签名,还须要使用zipalign工具对APK进行对齐操做,这样作的好处是当应用运行时减小内存的开销。开发工具

 

补充: 关于改善android性能工具zipalign的介绍

什么是Zipalign? 
     Zipalign是一个android平台上整理APK文件的工具,它首次被引入是在Android 1.6版本的SDK软件开发工具包中。它可以对打包的Android应用程序进行优化, 以使Android操做系统与应用程序之间的交互做用更有效率,这可以让应用程序和整个系统运行得更快。用Zipalign处理过的应用程序执行时间达到最低限度,当设备运行APK应用程序时占更少的RAM(Random Access Memory)随机访问内存,咱们强烈推荐在新的和已经发布的程序上使用zipalign工具来获得优化后的版本--即便你的程序是在老版本的Android平台下开发的

Zipalign如何优化?

  Zipalign对apk文件中未压缩的数据在4个字节边界上对齐,当资源文件经过内存映射对齐到4字节边界时,访问资源文件的代码才是有效率的。4字节对齐后,android系统就能够经过调用mmap函数读取文件,进程能够像读写内存同样对普通文件的操做,系统共享内存IPC,以在读取资源上得到较高的性能。 若是资源自己没有进行对齐处理,它就必须显式地读取它们——这个过程将会比较缓慢且会花费额外的内存。  

  mmap系统调用使得进程之间经过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程能够像访问普通内存同样对文件进行访问,没必要再调用read(),write()等操做.

  程序中大量运用mmap,用到的正是mmap的这种“像访问普通内存同样对文件进行访问”的功能。当要对一个文件频繁的进行访问,而且指针来回移动时,调用mmap比用常规的方法快不少  

  在4个字节边界上对齐的意思就是指编译器吧4个字节做为一个单位来进行读取的结果,这样的话,CPU可以对变量进行高效、快速的访问(较以前不对齐)。     

      android系统中的Davlik虚拟机使用本身专有的格式DEX,DEX的结构是紧凑的,为了让运行时的性能更好,能够进一步用"对齐"进一步优化,可是大小通常会有所增长。

  从未对齐的apk中读取资源比较慢且花费较多内存。最好的状况是,Home程序和未对齐的程序启动得比对齐后的慢(这也是惟一可见的效果)。最坏的状况是,安装一些未对齐资源的应用程序会增长内存压力,并所以形成系统反复地启动和杀死进程。最终,用户放弃使用如此慢又耗电的设备。

Zipalign如何使用?

使用ADT:

  • 若是你使用导出向导的话,Eclipse中的ADT插件(从Ver. 0.9.3开始)就能自动对齐Release程序包。使用向导,右击工程属性,选择“Android Tools” > “Export Signed Application Package…”。固然,你还能够经过AndroidManifest.xml编辑器的第一页作到。

使用Ant:

  • Ant编译脚本(从Android 1.6开始)能够对齐程序包。老平台的版本不能经过Ant编译脚本进行对齐,必须手动对齐。
  • 从Android 1.6开始,Debug模式下编译时,Ant自动对齐和签名程序包。
  • Release 模式下,若是有足够的信息签名程序包的话,Ant才会执行对齐操做,由于对齐处理发生在签名以后。为了可以签名程序包,进而执行对齐操做,Ant必须知道 keystore的位置以及build.properties中key的名字。相应的属性名为key.store和key.alias。若是这些属性为空,签名工具会在编译过程当中提示输入store/key的密码,而后脚本会执行签名及apk文件的对齐。若是这些属性都没有,Release程序包不会进行签名,天然也就不会进行对齐了。 

手动:

  • 为了可以手动对齐程序包,Android 1.6及之后的SDK的tools/文件夹下都有zipalign工具。你可使用它来对齐任何版本下的程序包。你必须在签名apk文件后进行,使用如下命令:zipalign -v 4 source.apk destination.apk
  • 验证对齐:
    • 如下的命令用于检查程序包是否进行了对齐:zipalign -c -v 4 application.apk
相关文章
相关标签/搜索