http://p.ymt360.com/w/app/wiki/tech/build_apk/
简介
Android支持使用ANT打包。
通过ANT脚本,可以对文件进行编译、打包、安装、联合SVN自动拉取等。
并且支持多种方式打包,如debug、release、批量打包等场景。
eclipse项目是通过调用SDK提供的ANT脚本build.xml文件进行打包的。
附件是AndroidSDK附带的打包脚本,超详细,可以参考学习下。build.xml
(建议使用JDK1.6环境,在之前ANT使用过程中被1.7环境坑过)
使用建议
Android studio 使用gradle 进行编译打包,
gradle是google推荐的打包方式,如果以后开发环境切换到Android studio 建议使用gradle
如果是在eclipse开发环境可以使用ANT或者gradle
YMT APP开发时 Android studio是测试版本阶段,gradle学习资料较少,基于目前的目录结构,采用ANT进行打包。
命令介绍
Android打包流程先介绍下:
1.用aapt命令生成R.java文件
2.用aidl命令生成相应java文件
3.用javac命令编译java源文件生成class文件
4.用dx.bat将class文件转换成classes.dex文件
5.用aapt命令生成资源包文件resources.ap_
6.用apkbuilder.bat打包资源和classes.dex文件,生成unsigned.apk
7.用jarsinger命令对apk认证,生成signed.apk
配合我们项目介绍在YMT项目中使用ANT的流程
1.clean清除temp文件
2.初始化各种temp目录
3.用aapt命令 打包项目的资源文件 生成R.java文件
4.生成buildconfig类 主要用于在项目中调用 BuildConfig.Debug判断是否DebugAPK的代码
5.用aidl命令生成相应java文件
6.用javac命令编译java源文件生成class文件
7.将class文件生成jar文件
8.对打包后的结果进行混淆
9.用dx.bat将class文件转换成classes.dex文件
10.用apkbuilder.bat打包资源和classes.dex文件,生成unsigned.apk
11.用jarsinger命令对apk认证,生成signed.apk
12.zipalign,对混淆的签名包做优化
脚本分析
我们详细介绍每一个步骤所使用到的命令:
打包过程不在代码基础上进行操作,全部在副本里面进行操作。
1.清除temp文件,删除之前复制代码(包括依赖库代码)到的temp文件夹
<target name="clean" > <echo> Start clean... </echo> <mkdir dir="${apk}" /> <delete dir="${temp}" /> <delete dir="${ymtBaseApp-temp}" /> <delete dir="${pulltofresh-project-temp}" /> <delete dir="${datetimepicker-library-temp}" /> <delete dir="${c3kDemo-lib-temp}" /> <echo> Finished clean... </echo> <echo> </echo> </target>
- 创建temp文件夹,复制依赖库文件,项目文件到temp文件夹中(src,gen,lib等)
<target name="init" > <echo> Start init... </echo> <echo> If not exist, then create the directories... </echo> <mkdir dir="${apk}" /> <mkdir dir="${temp}" /> <mkdir dir="${ymtBaseApp-temp}" /> <mkdir dir="${pulltofresh-project-temp}" /> <mkdir dir="${datetimepicker-library-temp}" /> <mkdir dir="${c3kDemo-lib-temp}" /> <mkdir dir="${classes}" /> <mkdir dir="${classes-obfs}" /> <mkdir dir="${gen}" /> <mkdir dir="${lib}" /> <echo> Copy files to temp directory... </echo> <copy filtering="true" todir="${temp}" > <fileset dir="${project_path}" > <exclude name="**/.svn/*" /> <exclude name="**/temp/" /> <exclude name="**/temp2/" /> <exclude name="**/bin/" /> <exclude name="**/gen/" /> </fileset> </copy> <echo> Copy files of xxx android library project to temp2 directory... </echo> <copy filtering="true" todir="${ymtBaseApp-temp}" > <fileset dir="${ymtBaseApp}" > <exclude name="**/.svn/*" /> <exclude name="**/bin/" /> <exclude name="**/gen/" /> </fileset> </copy> <copy filtering="true" todir="${pulltofresh-project-temp}" > <fileset dir="${pulltofresh-project}" > <exclude name="**/.svn/*" /> <exclude name="**/bin/" /> <exclude name="**/gen/" /> </fileset> </