首先,说明下这个问题的来历。
优秀的(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'

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

apply plugin: 'com.android.library'

发布这样的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 打入签名

参考

  • Android 组件化开发原理和配置
  • android编译原理

更多相关文章

  1. 吐血整理:推荐几款顶级好用的IDEA插件
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. jni学习笔记之二:编写Hello Jni
  7. Android(安卓)For JNI(六)——交叉编译,NDK概述以及文件结构,编写
  8. Android(安卓)LruCache技术原理
  9. ubuntu 10.10 alternate 系统SSH服务安装简介

随机推荐

  1. Android IPC进程通信——Messager方式
  2. Android 学习笔记7---数据存储与访问
  3. Android入门:单元测试
  4. Android 记住listView的位置
  5. Ubuntu连接Android真机调试
  6. Android点亮屏幕
  7. Android——编译系统初始化设置
  8. 【Android】 字体适配——不跟随系统字体
  9. android 自定义title
  10. Android assets 目录介绍和应用