一、目的
1、针对目前多个渠道发布,需要根据不同渠道编译相应的apk包,如果单纯依靠工程师手动编译,严重影响了开发效率
2、每次修复产品bug, 测试都会要求工程师发布测试包进行验证,如果利用脚本实现debug版本的编译,会降低时间成本
3、避免手动编译造成的不必要错误,影响产品发布
二、具体要求
1、由于笔者所用开发环境为ubuntu, 在此先以linux 实现为例,讲解如何实现ant 编译和批量打包
2、为尽量适配更多的项目,我们的工程在配置上尽量复杂些,如依赖多个jar包,多个类库,并且要求代码混淆
三、技术实现
ubuntu 配置 ant 环境,sudo apt-get install ant
利用Android SDK工具,通过Ant脚本编译,以及循环编译打包,实现多渠道apk的生成
单一打包步骤:
1、针对依赖工程,配置好依赖关系
如 project.properties 文件,配置好 android.library=true, 指明这是一个依赖工程,避免Ant编译时误认为是一个Android项目。
2、代码混淆部分保证没问题(这个如果有需要,后面会详细再讲)
3、利用 SDK 工具,生成 build.xml 文件
sdk路径: /..path../sdk/tools/android
命令如下: ../sdk/tools/androidupdate project -s -n [projectName] -t [android-version] -p [path]
eg: android update project -s -n Example -t android-17 -p ./
简单解释一下命令:
-s --subprojects: Also updates any projects in sub-folders, such as test projects
-n --name : Project name.
-t --target : Target ID to set for the project.
-p --path : The project‘s directory. [required]
4、利用Ant进行编译,打包。根据debug or release 模式进行编译,如: ant debug 或者 ant release
等待编译完成,会在bin目录下生成相应的apk包, eg: 如 Example-debug.apk 或者 Example-release.apk
批量打包步骤:
1、Ant不支持for循环,但是ant支持第三方扩展包,这里我们利用 ant-contrib-1.0b3.jar 来实现foreach循环, 如下配置文件中指定这个jar包的路径
这里我们要定义渠道ID,每次打包完毕替换相应的ID.
另外,channel_id 需要我们在AndroidManifest.xml文件application标签内添加,例如 <meta-data android:name="channel_id" android:value="91" />
工程根目录下,定义规则文件custom_rules.xml, 并且在之前update生成的build.xml里引用此文件
注意:一定要在<import file="${sdk.dir}/tools/ant/build.xml" />之前引用 <import file="custom_rules.xml" optional="true" />,否则ant会找不到此规则。
custom_rules.xml 文件内容 如下:
2、工程根目录下定义local.properties文件,声明sdk.dir, market_channels,apk.dir等参数并赋值,例如:
注意:ant脚本不会自动创建保存apk的目录,所以目标文件夹/home/android/develop/apks必须提前创建,否则在zipalign时候会报错, 这里通过 <mkdir dir="${apk.dir}" /> 脚本实现了。
3、如果需要签名,需要配置keystore的密码,如果不配置,每次编译都会要求输入密码并确认密码。
配置文件:工程根目录下定义 ant.properties, 具体内容如下(不包括[ ]):
4、进行打包编译:
运行target 任务, ant deploy, 进行批量打包。
四、关于windows
除了 Ant 配置不同,其他一样。在此不再赘述。有不对的地方,请多指正,感谢~
原文:http://www.cnblogs.com/androideng/p/3552550.html