ant android 打包簽名和渠道

1.Ant 安裝:android

     ant的安裝比較簡單,下載以後將其解壓到某個目錄而後配置環境變量(新建ANT_HOME環境變量,值爲ant所在的目錄,而後將ANT_HOME/bin添加到path中)git

2.對已存在的Android項目提供Ant支持正則表達式

1)沒引用第三方類庫,在項目根目錄下輸入:
android update project --name test -p ./express

2)若是項目只是引用了第三方jar包,只要將jar包放在libs文件夾下就ok了,ant會在編譯打包過程當中會自動將第三方jar加進去的。
3)當咱們的android 項目參考了其餘library項目,首先要在library的根目錄下輸入:
android update lib-project -p ./windows

而後在工程的根目錄下輸入
android update project -p . -s --target android-14app

其中-s:subprojectseclipse

3.編譯打包項目:svn

1)測試包測試

ant debug : 生成一個測試版apk,默認使用 debug key 進行簽名,生成的apk(your_project_name-debug.apk)在bin目錄下。ui

2)未簽名包

ant release : 生成一個未簽名和未aligned的apk包,生成的apk(your_project_name-release-unsigned.apk和your_project_name-release-unaligned.apk)在bin目錄下

3)簽名包

在項目的根目錄下建一個ant.properties文件,輸入以下內容,其中keystore密碼和alias密碼能夠不指定(防泄漏),那麼在命令執行的過程當中會要求你輸入。

#keystore的路徑,必須使用正斜槓 
key.store=test.keystore
#keystore的密碼 
#key.store.password=***** 
#別名 
key.alias=test
#alias密碼 
#key.alias.password=******      

在項目根目錄下運行 ant release 命令就會幫你生成一個通過簽名和aligned的apk,生成的apk(your_project_name-release.apk)在bin目錄下

4)渠道包

實現批量循環打包須要一個相似於for循環的功能,在Ant的核心包裏沒有相關的For循環的Task,即不支持for循環,可是ant支持第三方擴展包,以支持更多的其餘功能。

因而咱們要下載相應的支持for循環的擴展包。可使用開源的Ant-contrib包。下載地址:http://antcontrib.sourceforge.net/  。下載後的解壓獲得的jar(ant-contrib-1.0b3.jar或者其餘版本)文件放到ant的lib目錄。

(1)首先在ant.properties文件中增長屬性 market_channels (渠道列表,以逗號分割),version(應用程序版本名)

#渠道市場列表  

market_channels=360,wandoujia,baidu  

#版本號  

version=1.5.1

(2)增長custom_rules.xml文件到項目根目錄或者將<project></project>中的代碼添加到build.xml中

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" >
 <!-- 渠道包打包腳本  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>

</project>

在項目根目錄下運行 ant deploy 命令就會幫你各個渠道的簽名包了

,在bin目錄的out目錄下。

4.過程當中的報錯

1)

D:\Program Files\android-sdk-windows\tools\ant\build.xml:1147: Keystore was tampered with, or password was incorrect:Password verification failed
D:\Program Files\android-sdk-windows\tools\ant\build.xml:1147: Signing key test not found

test.keystore中有錯誤,路徑或者是別名不對

2)

這是因爲library沒有支持ant自動編譯

3)
[aapt] invalid resource directory name: D:\work\appcompat_v7\bin\res crunch

緣由分析

透過錯誤信息咱們能夠了解到,錯誤的緣由是在編譯目錄 bin/res 目錄中產生了一個叫crunch 的目錄,而根據 android 規範這是不容許的,因此就出現了這個錯誤。

解決辦法有以下三個

  1. 將 eclipse 的自動編譯先去掉勾選(crunch 是ecliplse 生成的),而後在執行ant打包。

  2. 修改 androidsdk/tools/ant/build.xml 中 aapt.ignore.assets 的值參照
     <property name="aapt.ignore.assets" value="&lt;dir&gt;crunch:!.svn:!.git:.*:&lt;dir&gt;_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" />

  3. 在配置好ant 的執行環境後 cd 到源碼目錄 而後執行 ant release

相關文章
相關標籤/搜索