一个下午都在修改原来的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工程
1 |
android update lib-project --target 8 --path . |
2. 主工程. 在当前路径上,创建一个名为XXXXXXBuilder,TARGET为8的工程(eg 可以用android list targets 命令查看所有的target),依赖的library相对或绝对路径
1 |
android update project --name XXXXXBuilder --target 8 --path . --library ../xxxx |
另外,没必要像文档离说的那样local.properties和ant.properties要分开写。把所有配置文件写在一个里面也就够了。不然维护起来也不方便
解决了上面问题,多渠道打包就简单了。直接贴xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
<?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> |
结束
近期评论