使用友盟更新,如果要进行多渠道监控,则需要打多个包,非常麻烦,使用Ant多渠道打包方式打包非常方便快捷。网上已有很多Ant多渠道打包的文章,打包过程可参照这两篇博客,讲的很详细,本文主要讲述打包过程中遇到的问题和注意事项,以及提供一份demo。
Ant基础打包过程
Ant多渠道打包
如果看完上述博客已经可以成功打包,则不需要看如下内容了,如果没有打包成功则需保证,通过ant release命令已经可以成功打成单独的包。本文以附件的demo为基础进行讲述,该demo依据上述文章完成。
如果要完成ant多渠道打包,需要四个文件。
1、build.xml
2、local.properties
3、ant.properties
4、custom_rules.xml
其中文件1、2在执行android update project –name AntTest -t android-17 -p ./命令后自动生成,文件3、4可从别处移植过来。
打包过程:
【1】导入循环打包所需的jar包:ant-contrib-1.0b3.jar,该包很多地方可以下载。
【重要】
(1)下载好该包后右键点击该jar文件选择“打开方式”WinRAR压缩文件管理器,依次打开
net/sf/antcontrib/antcontrib.properties,然后用#注释掉if=net.sf.antcontrib.logic.IfTask这一 行,这是因为ant-contrib中的if语句会与Android-SDK自带的if语句冲突,导致报错if doesn’t support the “condition”attribute,所以我们这里要注释掉ant-contrib中的if语句,只使用它的foreach语句。
(2)在某些配置文件中会写到该包的地址,默认为lib/ant-contrib-1.0b3.jar,而不是libs/ant-contrib-1.0b3.jar,最简单的做法是,在项目中新建一个lib文件夹,把该jar包放进去,然后右键该包手动执行Add to Build path操作。
【2】通过android update命令生成文件1、2。
【3】在demo中移植文件1、3、4覆盖到项目中。
【4】根据项目情况修改文件1、3中的内容。
文件3:
内容比较直观,可以直接查看文件中的注释,修改对应内容,如果在eclipse中注释显示成乱码或者\u751F\u6210\u76EE\u5F55的样子,可以通过其他工具如notepad++打开。
【注意】在修改路径时,如key.store=E:\anttest2的样式,反斜杠必须是两个,复制粘贴路径时,IDE会自动有一个escape backslashes in original string的地址,点击即可。另外所写的路径必须是存在的,如果不存在,系统不会默认新建。
文件1:
name="AntTest"
此处的内容,改为自己的项目名。
<replaceregexp
encoding="utf-8"
file="AndroidManifest.xml"
match="ANTS"
replace="${channel}" />
和
<replaceregexp
encoding="utf-8"
file="AndroidManifest.xml"
match="${channel}"
replace="ANTS" />
其中match="ANTS"和replace="ANTS"是在AndroidManifest.xml文件中友盟的默认渠道名称,对应
<meta-data
android:name="UMENG_CHANNEL"
android:value="ANTS" />
中的value值,在循环打包中用于替换成指定渠道名。
<copy tofile="${gos.path}/test_${channel}.apk" >
<fileset
dir="${out.absolute.dir}/"
includes="AntTest-release.apk" />
其中的includes="AntTest-release.apk"是临时apk文件,把-release之前的部分替换成自己的项目名称.
5、执行ant deploy命令完成多渠道打包。
【可能遇到的错误】
1、编译过程中
[taskdef] Could not load definitions from resource net/sf/antcontrib/antlib.xml. It could not be found.
忘记了导入ant-contrib-1.0b3.jar包。
2、编译过程中
D:\Android\sdk\tools\ant\build.xml:601: The following error occurred while executing this line:
D:\Android\sdk\tools\ant\build.xml:653: The following error occurred while executing this line:
D:\Android\sdk\tools\ant\build.xml:698: null returned: 1
在系统tool/ant/build.xml文件中赋值
<property name="aapt.ignore.assets" value="crunch" />
3、编译过程中
BUILD FAILED
E:\workspace_20150701\AntTest\build.xml:117: The following error occurred while
executing this line:
E:\workspace_20150701\AntTest\build.xml:148: Cannot perform operation from direc
tory to file.
上述build文件中的临时apk文件名错误或者其他路径错误
【注意事项】
1、友盟的更新机制,一个设备安装A渠道的apk后,如果卸载该apk换装另一个渠道B的apk,则在统计中仍然会被认定为A渠道,导致无法验证统计信息。解决方法是,在友盟中重新申请一个appkey,用该key进行打包验证即可。
2、编译过程中如果出现编码错误的警告,立即停止编译查看报警告的位置,该警告的存在可能影响到编译完的apk的显示,出现乱码,另外如果某个类被整个注释掉,可能出现编码错误的警告。