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