多渠道批量打包
經過一天的奮戰,終於搞定了批量打包,不多說,上程式碼
多渠道就是按照不同的市場進行釋出不同的包,由於要改版本名,所以有的時候要打10多個包,在測試部的人員打一次包久會感覺不好,
先說前提,是運用android sdk進行打包,需要ant,
同時ant核心庫本身不支援遍歷功能,所以需要引入新庫ant-contrib-1.0b3.jar,需要放到ant\lib目錄下,我直接放到當前專案目錄下。
ant-contrib 下載地址: http://sourceforge.net/projects/ant-contrib/
如果出現如下錯誤,說明沒有放置jar檔案
Buildfile: D:\ProjectDemo\build.xml
[taskdef] Could not load definitions from resource net/sf/antcontrib/antcontri
b.properties. It could not be found.
對現有專案進行編譯
android update project --name ProjectDemo --target 8 --path ./
生成一下一個檔案
- Updated project.properties
- Updated local.properties
- Added file D:\ProjectDemo\build.xml
-
Updated file D:\ProjectDemo\proguard.cfg
首先要在AndroidManifest.xml檔案中加入
<meta-data android:value="baiduyingyongzhongxin" android:name="CHANNEL"/>
用來表示版本的值
然後再把要替換的值放在配置檔案,可以放在ant.properties, project.properties, local.properties等檔案,當然如果為了打包與這些檔案分離,可以自己建立一個檔案,並匯入,筆者作為測試,放在了ant.properoties檔案中,這裡不推薦
上面就是需要打包的版本,是三個市場的,也就是說要打3個包market_channels=anzhuoshichang,jifengshichang,baiduyingyongzhongxin app_version=1_0_build_0
一下是build.xml檔案中新增的原始碼
<taskdef resource="net/sf/antcontrib/antcontrib.properties" >
<classpath>
<!-- <pathelement location="lib/ant-contrib-1.0b3.jar" /> -->
<pathelement location="./ant-contrib-1.0b3.jar" />
</classpath>
</taskdef>
<echo>Run ant-contrib OK</echo>
<target name="deploy">
<foreach target="edit_and_build" list="${market_channels}" param="channel" delimiter=",">
</foreach>
</target>
<target name="edit_and_build">
<echo>Run '${channel}' apk</echo>
<!-- flags="g" 指定全域性替換,替換所有符合規則的欄位
byline="false" 確認被替換的時候是一次替換一行還是多行
pattern 屬性用來指明正則表示式 -->
<replaceregexp flags="g" byline="false">
<regexp pattern="android:value="(.*)" android:name="CHANNEL""/>
<!-- substitution expression 中是替換的值,替換的值都定義在相對應的配置檔案中 -->
<substitution expression="android:value="${channel}" android:name="CHANNEL"" />
<!-- fileset 屬性中的 dir 用來指定被替換檔案所在的目錄
includes 用來指定要替換哪個檔案。 -->
<fileset dir="" includes="AndroidManifest.xml" />
</replaceregexp>
<property name="out.final.file" location="./${channel}.apk" />
<antcall target="clean" />
<antcall target="release" />
是不是感覺頭很大,看不懂,沒關係,學知識就是要循序漸進,
推薦兩篇文章,學習一些怎麼迴圈讀資料,看懂了那兩個,再看筆者這個久容易很多了
http://blog.csdn.net/androiddevelop/article/details/11619635
這裡面有一個地方
<property name="out.final.file" location="./${channel}.apk" />
筆者親測用out.final.file才能生成不同版本的apk,不知道是不是變數名稱的改變http://www.cnblogs.com/stay/archive/2013/05/27/3102027.html這篇講了比較多的原由