在前一篇中,我給你們分享了一下,如何使用Ant自動打包, 這一篇文章中,我就跟你們一塊兒討論如何實現批量多渠道打包. 我也是現學的, 有什麼不足的地方,但願你們指出.java
實現批量循環打包須要一個相似於for循環的功能,在Ant的核心包裏沒有相關的For循環的Task,即不支持for循環,可是ant支持第三方擴展包,以支持更多的其餘功能。node
因而咱們要下載相應的支持for循環的擴展包。能夠使用開源的Ant-contrib包。下載地址:http://ant-contrib.sourceforge.net/ 。android
下載好這個ant-contrib-1.0b3.jar包後, 將它複製到 ant 目錄的lib文件夾中正則表達式
(1)首先在ant.properties文件中增長屬性 market_channels (渠道列表,以逗號分割),version(應用程序版本名)
express
(2) 在build.xml 中添加以下代碼, 注意添加的位置,要接着Condition標籤app
下面的內容是要添加的less
<?xml version="1.0" encoding="UTF-8"?> <project name="AntTestDemo" default="help"> <!-- The local.properties file is created and updated by the 'android' tool. It contains the path to the SDK. It should *NOT* be checked into Version Control Systems. --> <property file="local.properties" /> <!-- The ant.properties file can be created by you. It is only edited by the 'android' tool to add properties to it. This is the place to change some Ant specific build properties. Here are some properties you may want to change/update: source.dir The name of the source directory. Default is 'src'. out.dir The name of the output directory. Default is 'bin'. For other overridable properties, look at the beginning of the rules files in the SDK, at tools/ant/build.xml Properties related to the SDK location or the project target should be updated using the 'android' tool with the 'update' action. This file is an integral part of the build system for your application and should be checked into Version Control Systems. --> <property file="ant.properties" /> <!-- if sdk.dir was not set from one of the property file, then get it from the ANDROID_HOME env var. This must be done before we load project.properties since the proguard config can use sdk.dir --> <property environment="env" /> <condition property="sdk.dir" value="${env.ANDROID_HOME}"> <isset property="env.ANDROID_HOME" /> </condition> <!-- 渠道包打包腳本 ant deploy--> <taskdef resource="net/sf/antcontrib/antcontrib.properties"> <classpath> <pathelement location="lib/ant-contrib-1.0b3.jar"/> </classpath> </taskdef> <target name="deploy"> <foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=","> </foreach> </target> <target name="modify_manifest"> <replaceregexp flags="g" byline="false"> <!-- 匹配的內容是 android:value="*****" android:name="UMENG_CHANNEL" --> <regexp pattern='android:value="(.*)" android:name="UMENG_CHANNEL"' /> <!-- 匹配以後將其替換爲 android:value="渠道名" android:name="UMENG_CHANNEL" --> <substitution expression='android:value="${channel}" android:name="UMENG_CHANNEL"' /> <!-- 正則表達式須要匹配的文件爲AndroidManifest.xml --> <fileset dir="" includes="AndroidManifest.xml" /> </replaceregexp> <property name="out.release.file" location="${out.absolute.dir}/${ant.project.name}_${channel}.apk" /> <!--包 --> <antcall target="release" /> <!--輸出渠道包到bin/out目錄下 --> <copy tofile="${out.absolute.dir}/out/${ant.project.name}v${version}-${channel}.apk" file="bin/${ant.project.name}-release.apk"/> </target> <!-- The project.properties file is created and updated by the 'android' tool, as well as ADT. This contains project specific properties such as project target, and library dependencies. Lower level build properties are stored in ant.properties (or in .classpath for Eclipse projects). This file is an integral part of the build system for your application and should be checked into Version Control Systems. --> <loadproperties srcFile="project.properties" /> <!-- quick check on sdk.dir --> <fail message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." unless="sdk.dir" /> <!-- Import per project custom build rules if present at the root of the project. This is the place to put custom intermediary targets such as: -pre-build -pre-compile -post-compile (This is typically used for code obfuscation. Compiled code location: ${out.classes.absolute.dir} If this is not done in place, override ${out.dex.input.absolute.dir}) -post-package -post-build -pre-clean --> <import file="custom_rules.xml" optional="true" /> <!-- Import the actual build file. To customize existing targets, there are two options: - Customize only one target: - copy/paste the target into this file, *before* the <import> task. - customize it to your needs. - Customize the whole content of build.xml - copy/paste the content of the rules files (minus the top node) into this file, replacing the <import> task. - customize to your needs. *********************** ****** IMPORTANT ****** *********************** In all cases you must update the value of version-tag below to read 'custom' instead of an integer, in order to avoid having your file be overridden by tools such as "android update project" --> <!-- version-tag: 1 --> <import file="${sdk.dir}/tools/ant/build.xml" /> </project>
以上是build.xml 文件的內容ide
(3) 在項目根目錄下運行 ant deploy 命令就會幫你各個渠道的簽名包了(爲了全程能夠自動執行,在bin目錄的out目錄下。post