现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要什么环境和工具,输入和输出是什么。那么我们就来挖掘一下Android的编译过程中的细节。

首先,我们假定你的系统(什么系统都行,不限于Linux还是Windows系统,当然,我在这里默认使用Linux系统来举例子,但在 Windows中几乎没有什么差别)已经安装了JDK和Android SDK。再假定你的Android SDK的路径是ANDROID_SDK_HOME,你想要编译的Android OS版本是ANDROID_OS_VERSION(比如android-1.6、android-8、android-10等)。

我们重点关心的是(1)这个过程的输入是什么?(2)这个过程的输出是什么?(3)这个过程使用了什么工具?至于使用什么参数,可以自己去看对应命令的帮助文件,或者在网上搜索,这不是本文的重点。

步骤中提到的工具如下表:

名称 功能介绍 在操作系统中的路径
aapt Android资源打包工具 ${ANDROID_SDK_HOME}/platform-tools/appt
aidl Android接口描述语言转化为.java文件的工具 ${ANDROID_SDK_HOME}/platform-tools/aidl
javac Java Compiler ${JDK_HOME}/javac或/usr/bin/javac
dex 转化.class文件为Davik VM能识别的.dex文件 ${ANDROID_SDK_HOME}/platform-tools/dx
apkbuilder 生成apk包 ${ANDROID_SDK_HOME}/tools/opkbuilder
jarsigner .jar文件的签名工具 ${JDK_HOME}/jarsigner或/usr/bin/jarsigner
zipalign 字节码对齐工具 ${ANDROID_SDK_HOME}/tools/zipalign

第一步:打包资源文件,生成R.java文件
【输入】Resource文件(就是工程中res中的文件)、Assets文件(相当于另外一种资源,这种资源Android系统并不像对res中的文件那样优化它)、AndroidManifest.xml文件(包名就是从这里读取的,因为生成R.java文件需要包名)、Android基础类库(Android.jar文件)
【输出】打包好的资源(一般在Android工程的bin目录可以看到一个叫resources.ap_的文件就是它了)、R.java文件(在gen目录中,大家应该很熟悉了)
【工具】aapt工具,它的路径在${ANDROID_SDK_HOME}/platform-tools/aapt(如果你使用的是Windows系统,按惯例路径应该这样写:%ANDROID_SDK_HOME%\platform-tools\aapt.exe,下同)。

第二步:处理AIDL文件,生成对应的.java文件(当然,有很多工程没有用到AIDL,那这个过程就可以省了)
【输入】源码文件、aidl文件、framework.aidl文件
【输出】对应的.java文件
【工具】aidl工具

第三步:编译Java文件,生成对应的.class文件
【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件)
【输出】.class文件
【工具】javac工具

第四步:把.class文件转化成Davik VM支持的.dex文件
【输入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),库文件(.jar文件)
【输出】.dex文件
【工具】javac工具

第五步:打包生成未签名的.apk文件
【输入】打包后的资源文件、打包后类文件(.dex文件)、libs文件(包括.so文件,当然很多工程都没有这样的文件,如果你不使用C/C++开发的话)
【输出】未签名的.apk文件
【工具】apkbuilder工具

第六步:对未签名.apk文件进行签名
【输入】未签名的.apk文件
【输出】签名的.apk文件
【工具】jarsigner

第七步:对签名后的.apk文件进行对齐处理(不进行对齐处理是不能发布到Google Market的)
【输入】签名后的.apk文件
【输出】对齐后的.apk文件
【工具】zipalign工具

知道了这些细节之后,我们就可以实现很多我们想实现东西了,比如:自动化,我们可以使用某种脚本,像Windows下的批处理,linux下的Bash,Java下的Ant,Python、Perl这样的脚本语言,甚至直接用Java、.net这们的强类型语言也是可以的。如果你真正弄懂了上面的步骤,了解了编译打包过程的本质,你完全可以以你想要的任何方式实现它的自动化,这才是真正的“举一反三,以不变应万变”。再比如,对Android SDK的精简,大家知道,现在Android SDK动辙几百兆,我们完全可以应用上面的知识,只保留必要的工具,把SDK精简到10M以下。当然,还可以做很多事情,前提是你真正弄懂了它。

转载于:https://www.cnblogs.com/wd-one/p/4724774.html

Android工程的编译过程相关推荐

  1. chromium android分析,Chromium Android工程迁移编译过程

    本文从Chromium编译的中间产物入手深入分析.学习Chromium Android版本的工程化定制流程.初始工作依赖于Chromium的ninja.GYP构建系统,在构建完成后基于编译中间产物,迁 ...

  2. Cocos2d-x学习之创建Android工程和编译

    本文为 博客园 日月之明 原创,转载请详细标明原创作者及出处,以示尊重! 作者:日月之明 原文:http://www.cnblogs.com/lhming/archive/2012/06/27/256 ...

  3. 简诉android源代码编译过程,Android源码编译过程及原理(二)

    在未来等风也等你 本节主要记录的内容anroid 编译系统的结构 编译中枢中main.mk的基本解析 除非特别说明本节中的目录都是基于android的源码目录 1. android 编译系统的结构 a ...

  4. Android面试收集录13 Android虚拟机及编译过程

    一.什么是Dalvik虚拟机 Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的 ...

  5. Android cocos2d-x开发(三)之创建Android工程和编译

    2019独角兽企业重金招聘Python工程师标准>>> 1.进入cocs2d-x目录,用文本编辑器打开create-android-project.bat 将_CYGBIN=设置为c ...

  6. Android工程重新编译问题

    以前写的一个Android程序,因为好久(其实也没多久 :-) )没有再捣腾Android,本来用的就不太熟,最近想重新研究一下,于是打开Eclipse,再打开原来的工作空间....竟然打不开了 :- ...

  7. 简述android源代码的编译过程,Android源码编译过程详述

    首先说一下,编译Android所用的系统,目前ubuntu是比较好的平台,也是官方推荐的,但具体版本,说的都比较少,为了避免大家走弯路,我 这里说一下,最好的就是ubuntu 8.10,他所带有的各个 ...

  8. android源码编译过程

    1.下载好android源码包. 2.装好vm,ubuntu(如果能在实体机装linux更好). 3.安装所需要的deb包 在终端执行如下命令: sudo apt-get install flex b ...

  9. Android 源码编译过程

    1.解压 xxx.tar.gz 自动到alps目录 #tar xzvf xxxxxxxx.tar.gz 2.svn checkout #svn checkout svn://192.168.40.12 ...

最新文章

  1. ssh 信息泄露 1 处,服务存在被爆破风险如何处理
  2. nginx gzip配置
  3. 【ARM】Tiny4412裸板编程之静态库(libc.a)
  4. python中属于私有属性的是_Python中的实例属性和私有属性
  5. 鹰角网络全球海量数据,一键轻松统一存储与处理
  6. web-java-Java Concurrency Utilities
  7. windows下使用vim
  8. python保存文件后缀_python文件的后缀名是什么
  9. ArcGIS Pro中的拓扑检查
  10. 视频剪辑软件产品调研分析
  11. 电脑管家急救箱linux,腾讯电脑管家系统急救箱
  12. java获取本机外网ip
  13. 层次分析法在matlab上的实现
  14. 量化——【01】你不得不知道的金融量化基础知识
  15. CDGA|数据治理中数据如何分类分级呢?
  16. html加入3d模型的,3dmax怎么给模型添加材质
  17. echarts图标的文字(label)动态切换显示隐藏
  18. 基于Quartus Prime的NiosII基础开发流程
  19. matlab用C语言画图,Matlab数据与函数的作图(详细例子)c.pdf
  20. 广州欧米区块链科技×浙江墨客奇迹区块链科技丨达成战略合作共识

热门文章

  1. 最强阿里巴巴历年经典面试题汇总:C++研发岗
  2. addr2line 和 tombstone问题分析
  3. signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis
  4. mininet 应用实践
  5. Android Gradle 批量修改生成的apk文件名
  6. 有驾照不等于会开车,教你开车技巧27招
  7. 10大清宿便排毒方法及简单排毒瘦小腹运动
  8. 优质的程序员需为代码效率而呕心沥血
  9. Linux 查看 MySQL 版本的四种方法
  10. 不要再问我跨域的问题了