最近刚忙完了一个项目,本以为可以好好放松一下了,没想到客户提了一个变态的要求,同时要打包上线100多个渠道,需要替换图标,启动页还有一堆烦人的参数,粗略估计一个一个打包,至少两天时间,真是醉了。心中一阵草泥马飞过之后,想着自己的尾款还没到账,只能硬着头皮搞一个自动化的打包脚本。
1、首先安装ant ,下载地址 http://ant.apache.org/ 不会安装的可以参考 http://yarin.blog.51cto.com/1130898/692569 。
2、利用Ant批量打包的基本思想是,每次打包后自动替换渠道号,以及自己要替换的参数,比如本demo就要不仅要替换渠道号,一些参数,还要替换图标和启动页面。
这样带来了一个问题:Ant不支持循环,怎样循环打包?
扩展包Ant-contrib能轻松解决这个问题
可以翻墙的同学可以到 http://ant-contrib.sourceforge.net/ 自行下载,或者去我的云空间下载 http://pgyer.qiniudn.com/ant-contrib-1.0b3.jar ,下载后直接把ant-contrib-1.0b3.jar放到Ant的lib文件夹即可。
3、生成并改写build.xml 执行如下命令
android update project --name testbyfrank -t 1 -p /Users/frank/Documents/workspace/testbyfrank
此命令在当前的工程目录生成build.xml, -t 表示targetid 可以通过android list targets查看 -p 指定工程目录
修改build.xml 代码见demo
4、生成ant.properties 内容如下:market_channels是用来替换的参数以:和-分割。
java.encoding=utf-8
out.absolute.dir=/Users/frank/Documents/publish_testbyfrank
gos.path=/Users/frank/Documents/publish_testbyfrank_bin
proguard.config=proguard.cfg
app_version=1.5
market_channels=/u65B0/u77E5:60-xinzhi,/u897F/u5149:18-xiguang
5、project.properties文件中打开混淆代码,去掉下面所在行的#
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
6、编写proguard-project.txt,demo中有,大家自行删减
6、执行命令ant deploy就慢慢等待生成的多渠道的apk吧
7、最后在目录/Users/frank/Documents/publish_testbyfrank_bin下生成了两个apk
testbyfrank_xiguang.apk 和testbyfrank_xinzhi.apk
自己抽离出来的demo已经经过我的测试没有问题,大家可以通过 http://pgyer.qiniudn.com/testbyfrank.zip 下载示例代码。
注意事项及可能遇到的问题
1.工程如果引用到其它类库工程,请先生成类库的build.xml
2.如果提示invalid resource directory name: /Users/frank/Documents/workspace/appcompat_v7/bin/res/crunch等类似的错误请先手动删除bin目录,重新执行ant deploy命令
3.如果出现Can't read [/Users/frank/Documents/workspace/testbyfrank/libs/Android_Location_V1.1.0.jar] (No such file or directory)类似的错误,表明你没有用到这个类库,请在混淆文件中去掉对应的即可。
4.如果xml文件有用到自定义的控件,对应的java文件不能混淆
5.如果用的gson的库,对应的实体类不可以混淆。