Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步都做了什么,需要什么环境和工具,输入和输出是什么,等等。
首先,假定你的系统(Windows、Linux、Mac OS都行,本文默认使用Linux系统来举例子,但在 Windows中几乎没有什么差别)已经安装了JDK和Android SDK, 如果没有安装,可以参考我先前的博客:Ubuntu搭建Eclipse+JDK+SDK的Android和Windows搭建Eclipse+JDK+SDK的Android。
再假定你的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文件
【工具】dex工具
第五步:打包生成未签名的.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以下。当然,还可以做很多事情,前提是你真正弄懂了它。
分享到:
相关推荐
此文档包括了完整的VLC-android项目编译过程,包含live555移植方法,对官方的方案进行了大幅修改,有效解决了官方编译过程中的错误。
SQLCipher_for_Android_sourcebuild_源码编译过程
集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身,支持logcat日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;...
i-jetty是一个Google的开源项目Jetty for Android,即开源Android web服务器。据了解:android平台上搭建web服务器,html、javascript、css和servlet 可以正常访问,但 jsp提示 “jsp support not configured”。
Android系统开发编译环境配置 1 Ubuntu下使用Simba服务实现局域网内文件共享 3 ...android系统开发编译过程中的汇编错误 67 android系统开发(十)-audio移植 68 android系统开发小知识-启动脚本文件内部的执行顺序 74
ffmpeg的编译过程详解,ffmpeg命令行工具在android 上的移植,通过ndk-build或者cmake方式在android studio2.2,ndk14(官网下载android studio2.2,然后通过studio上sdk下载ndk-bundle)构建工程项目。使用的ffmpeg...
已编译vlc android代码,可以直接在eclipse里运行使用,项目配置ANDROID_ABI=armeabi-v7a export NO_NEON=0 ...详细编译过程可以参考: http://www.cnblogs.com/liulipeng/archive/2012/10/09/2717198.html
官方示例中Android平台的两个Hello World编译后项目,整个过程坑爹一坨坨。 Android平台官方文档页为: 编译环境 Ubuntu-14.04.1-LTS-i386 PJSIP-2.3 ndk-r9d-linux-x86 经验和教训 简而言之就是以下几句话: 别用...
Android Killer 中文版是一款可视化的安卓反编译软件,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身,支持logcat日志输出,语法高亮,基于关键字(支持...
解决方案:不要在让transactions在其他的Activity生命周期函数提交,如onActivi tyResult()、onStart()和onResume() 自己在学习过程中总结的知识点 (3)Android体系结构和Android项目目录 Android是基于Linux内核...
4. 本地代码的编译与部署:介绍了如何将C/C++代码编译成动态链接库(.so文件),并将其部署到Android项目中。 5. JNI内存管理:讲解了在JNI开发过程中如何进行内存管理,以避免内存泄漏等问题。 6. 异常处理:介绍...
Android Killer是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一 身,支持logcat日志输出,语法高亮,基于关键字(支持单行...
Android Studio作为开发环境,从Chromium for Android从chrome模块源代码加入Android项目。 在Chrome环境中构建本机代码,因此将文件加入Android项目 在Chrome环境中将基本模块(基础,内容,网络等)构建到jar包中...
这里有最基本的简单编译部署过程 Android直播实现(二)srs流媒体服务器部署 播放器 android端的播放使用vitamio,还是国内的开源播放器,是不是感觉国内的前辈们越来越屌了^~^! vitamio支持几乎所有常见的的视频...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
本项目利用tesseract实现了扫描识别中英文,避开了传统的拍照然后上传图片在去识别的过程。由于上传文件的60M大小限制,这里剔除掉了build文件,使用时Android studio重新编译一下就OK了.rar,太多无法一一验证是否...
掌握Android从应用开发,到系统移植,再到设备驱动开发的全套技术,无疑会极大的提升自己的职业竞争力和薪酬谢水平 ,本课程深入浅出,手敲全部实战项目代码,经历软硬件结合的嵌入式项目开发全部过程,而且课程中不...
2.3 创建第一个Android项目——HeUoAndroid 2.3.1 创建HelloAndroid项目 2.3.2 运行HelloAndroid及模拟器的使用 2.3.3 调试HelloAndroid 2.4 小结 第二部分 基础篇 第3章 Android程序设计基础 3.1 Android程序框架 ...
本文介绍了在获得Android整个源码的工程中,如何进行编译和调试。其中涉及了一些常用的命令和工具,最核心的就是Linux的Bash Shell脚本和GNU Make工具。其中的原理很复杂,但是作为普通的应用开发者,并不需要了解...
问题:有个arr文件被放到Module A中引用,现在Module B又依赖了Module A,则在编译过程中会发生错误,Module B找不到aar文件。(同时如果又有Module C 依赖了Module B,C也会出同样的问题) 解法: 1、正常给一个...