Android应用开发编译框架流程与IDE及Gradle概要,我们用最详细的方式解析Android消息机制的源码

本文详细解析了Android应用从源码到APK的复杂编译流程,包括aapt、aidl、dx、apkbuilder、ProGuard等关键工具的作用。此外,介绍了IDE中的构建特性,如tools命名空间属性,以及Android Annotations注解的使用。编译过程涉及资源打包、Java编译、dex转换、签名、优化等多个步骤,每个环节都有其重要性,构建过程中需关注方法数量限制和性能优化。
摘要由CSDN通过智能技术生成

这里写图片描述

关于Gradle的Android插件本文不会过多的说明,只给一个抛砖引玉的提示,详细使用参见文档API及Gradle配置,其实个性化的构建配置一般都是Gradle与Groovy的编写,与Android插件没太多关系,所以重点还在Groovy与Gradle构建。

不过在构建之前还需要先了解一些构建的流程和相关IDE及编译特性,具体下面会说到。

这里写图片描述

【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,请尊重作者劳动成果。私信联系我

2 Android应用编译框架

===================

在我们开发App时大多数时候的编译流程都是直接通过IDE的按钮或者命令行一步到位apk的生成,直观上的感觉好像源码到Apk的生成只有一步,实质不是这样的。从我们点击按钮那一刻到生成apk的过程实际是非常复杂的,涉及到很多步骤,下面我们来粗略看看。

2-1 Android应用源码到生成Apk流程


Android应用的编译其实就是打包为.apk文件,这个被打包的zpk文件实质其实是一个压缩包(譬如你可以重命名后缀解压),这个压缩包至少包含编译为.class文件转换的.dex文件、一个二进制的AndroidManifest.xml文件、编译的资源文件resources.arsc、未编译的资源文件等,然后在运行前再对这个压缩包进行签名操作即可。具体流程如下图:

这里写图片描述

Android构建系统是用来构建、测试、运行和封装应用程序的一个工具箱,整个构建系统我们可以通过已经集成OK的AS或者命令行来使用,构建过程会涉及许多工具和流程,通过这些工具和流程生成了许多中间文件,然后最终生成了APK。下图描述了构建过程中涉及的不同工具和过程:

这里写图片描述

构建系统将依据配置的product flavors、build types和dependencies合并所有的资源,如果此时不同文件夹含有相同名称或设置的资源则会按照如下规则进行覆盖:dependencies覆盖build types,build types覆盖product flavors,product flavors覆盖main资源文件夹。下面是对上图典型构建过程的详细描述:

  1. Android资源打包工具(AAPT)将应用的资源文件(譬如AndroidManifest.xml文件和Activity相关的XML文件等)进行编译,生成的一个R.java文件就是关联我们Java代码与资源文件的基础。

  2. aidl工具将应用中所有.aidl的文件转换为Java接口。

  3. Java编译器将应用中所有Java代码(包括R.java和aidl接口)编译输出为class类文件。

  4. dex工具将应用编译输出的类文件(包括第三方jar包)转换为Dalvik字节码,.dex文件就可以最终被打包如.apk文件。

  5. apkbuilder工具将所有非编译资源(譬如images)、编译资源和DEX文件打包成一个APK文件。

  6. 一旦.apk文件生成以后就必须进行签名(debug或者release签名)才能在设备上运行。

  7. 通过zipalign工具对齐APK,减少APP在设备上运行时的内存占用。

整个构建过程生成的东东默认都在app/build目录下(包括中间产物和最终产物)。

特别注意: 应用程序构建有一个64K方法限制说法,超过64K会抛出如下构建信息:

Unable to execute dex: method ID not in [0, 0xffff]: 65536.

如果撞上该问题(一般是超大型项目或者疯狂使用开源框架等就会越界)请点我参考解决

下面这幅图就是整个Android应用(不包含NDK部分)的构建编译框架详细流程说明(来源于官方):

这里写图片描述

通过这幅图可以明显看出来Android应用程序编译源码到最终的apk产物过程实际是十分复杂的,我们平时只是把这些细则交给了IDE和构建框架而已,所以察觉不到这些细则过程。

2-2 Android应用编译流程相关主要工具


上面简单说明了从源码到APK的编译框架过程,下面简单说说这一过程中涉及的几个重要的编译相关工具,具体如下文。

2-2-1 aapt工具

aapt(Android Asset Packaging Tool)是Android资源打包工具,在SDK的tools目录下,我们可以使用该工具查看、创建、更新ZIP格式的文件(zip、jar、apk等),也可以将资源文件编译成二进制文件。平时我们很少直接使用这个工具,通常都向前面编译流程图介绍的一样,编译框架会自动帮助我们调运这个工具。下面是aapt命令配置OK后运行的情况:

这里写图片描述

关于aapt命令工具的用法我们直接在终端输入aapt回车即可看见相关help文档,这里只给出几个我们比较常用的命令,其他的参见help文档。

列出压缩包的内容 #aapt l[ist] [-v] [-a] file.{zip,jar,apk}

这里写图片描述

查看APK包中指定内容 #aapt d[ump] file.{zip,jar,apk}

这里写图片描述

这个比较实用,有时候想快速知道一个app的包名等信息时可以通过该命令快捷获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值