android ant脚本批量打包-依赖别的项目

一个下午都在修改原来的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>

结束

评论关闭。