点击Android Studio 的build按钮后发生了什么?

首先,说明下这个问题的来历。 
优秀的(Android)软件工程师是如何练成的 
这篇文章提到了这个问题,于是就去思考下,也感谢前人的努力,让我们小菜鸟学习更加容易。


你一定会问,点击Build后(我理解是 Build > Make Module module-name),还能发生什么,无非是安装在模拟器或者真机上一个App呗~.没错,但是,这个问题的本意一定没这么简单。

gradle插件

要构建和运行应用,请点击 Run 。Android Studio 使用 Gradle 构建您的应用,会要求您选择部署目标(模拟器或连接的设备),然后将您的应用部署至目标。 
我们创建一个Android Application,至少要包含一个application module,并且在build.gradle中设置application 的gradle 插件:

apply plugin: 'com.android.application'
  • 1

这样,编译这种module时将才成.apk文件。 
一个application module不可以依赖另一个application module,只可以依赖library,就是配置 gradle library 插件的module:

apply plugin: 'com.android.library'
  • 1

发布这样的module时,得到的将是一个.aar文件,与.jar文件相比,aar文件可以包含一些android相关的东西:比如资源文件和manifest文件。

编译

编译一个application module或者library文件,大致可以分为gradle task代表的五个阶段: 
1. Preparation of dependecies 在这个阶段gradle检测module依赖的所有library是否ready。如果这个module依赖于另一个module,则另一个module也要被编译。 
2. Merging resources and processing Manifest 在这个阶段之后,资源和Manifest文件被打包。 
3. Compiling 在这个阶段处理编译器的注解,源码被编译成字节码。 
4. Postprocessing 所有带 “transform”前缀的task都是这个阶段进行处理的。 
5. Packaging and publishing 这个阶段library生成.aar文件,application生成.apk文件。

构建过程

这里写图片描述 
使用Android Asset Packaging Tool(aapt) ,将AndroidManifest.xml和res下的资源编译生成R.java文件,这样java文件就可以去引用资源了 - 使用aidl 工具去生成对应的Java interfaces - 将src和通过aapt生成的R.java,.aidl文件通过javaC命令去生成.class 文件 - 使用dex tool 将class文件转化成Dalvik byte code.这时候要将所有class文件和第三方的jar包都包括。 - 所有没有编译过得图片和编译过的图片,.dex文件传给apkbuilder去打包成.apk - 最后采用zipalign tool 打入签名.

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值