一个下午都在修改原来的android打包脚本,晚上仔细看了官网文档半小时搞完。╮(╯▽╰)╭
主要问题在于自己的android工程还依赖于第三方的一个工程library。网上不少例子都是完全重写apk的打包过程,不是不好。就是有点啰嗦不好维护。简单的对于依赖第三方的library工程也没说清除。google了这方面资料不多,我也傻劲东查查西找找折腾了一个下午。早应该想到老外如果没有专门讨论这块,就说明官网文档已经说的太明白了,不需要讨论了。
android ant打包说明:http://developer.android.com/tools/projects/projects-cmdline.html
简单说下,在贴自己的脚本。主工程(自己的工程)、第三方library工程这样有2个工程。意味着要写2个build.xml
1. library工程. 在当前路径上,创建一个TARGET为8的lib工程
android update lib-project --target 8 --path .
2. 主工程. 在当前路径上,创建一个名为XXXXXXBuilder,TARGET为8的工程(eg 可以用android list targets 命令查看所有的target),依赖的library相对或绝对路径
android update project --name XXXXXBuilder --target 8 --path . --library ../xxxx
另外,没必要像文档离说的那样local.properties和ant.properties要分开写。把所有配置文件写在一个里面也就够了。不然维护起来也不方便
解决了上面问题,多渠道打包就简单了。直接贴xml
<?xml version="1.0" encoding="UTF-8"?> <project name="xxxxBuilder" default="deploy"> <taskdef resource="net/sf/antcontrib/antlib.xml" > <classpath> <pathelement location="${basedir}/packages/antcontrib.jar" /> </classpath> </taskdef> ......省略 <target name="deploy" > <foreach delimiter="," list="${market_channels}" param="channel" target="modify_manifest" > </foreach> </target> <target name="modify_manifest" > <echo message="=============${channel}==============" /> <!-- AndroidManifest.xml 's replace --> <replaceregexp byline="false" flags="g" encoding="UTF-8" > <regexp pattern='android:name="UMENG_CHANNEL".*android:value="(.*)"' /> <substitution expression='android:name="UMENG_CHANNEL" android:value="${channel}_${app_version_name}"' /> <fileset dir="" includes="AndroidManifest.xml" /> </replaceregexp> <replaceregexp byline="false" flags="g" encoding="UTF-8" > <regexp pattern='android:versionCode="(\d+)"' /> <substitution expression='android:versionCode="${app_vcode}"' /> <fileset dir="" includes="AndroidManifest.xml" /> </replaceregexp> <replaceregexp byline="false" flags="g" encoding="UTF-8" > <regexp pattern='android:versionName="(\d+)"' /> <substitution expression='android:versionName="${app_version_name}"' /> <fileset dir="" includes="AndroidManifest.xml" /> </replaceregexp> <!-- Constant.java 's replace --> <replaceregexp byline="false" flags="g" encoding="UTF-8" > <regexp pattern='APPVERVALUE.*=.*"(.*)";' /> <substitution expression='APPVERVALUE = "${app_version}";' /> <fileset dir="${basedir}/src/com/xxx/android/xxxx/tools" includes="Constant.java" /> </replaceregexp> <replaceregexp byline="false" flags="g" encoding="UTF-8" > <regexp pattern='CLIENT_VERVALUE.*=.*"(.*)";' /> <substitution expression='CLIENT_VERVALUE = "${app_version}";' /> <fileset dir="${basedir}/src/com/xxx/android/xxxx/tools" includes="Constant.java" /> </replaceregexp> <replaceregexp byline="false" flags="g" encoding="UTF-8" > <regexp pattern='PROMOTION_IDV_ALUE.*=.*"(.*)";' /> <substitution expression='PROMOTION_IDV_ALUE = "${channel}_${app_version_name}";' /> <fileset dir="${basedir}/src/com/xxx/android/xxxx/tools" includes="Constant.java" /> </replaceregexp> <antcall target="release" /> <copy tofile="${gos.path}/${channel}_${app_version_name}.apk" > <fileset dir="${basedir}/bin" includes="xxxxBuilder-release.apk" /> </copy> <delete includeEmptyDirs="true" > <fileset dir="${basedir}/bin" includes="**/*" /> </delete> </target> </project>
结束
评论关闭。