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 規範這是不容許的,因此就出現了這個錯誤。
解決辦法有以下三個
將 eclipse 的自動編譯先去掉勾選(crunch 是ecliplse 生成的),而後在執行ant打包。
修改 androidsdk/tools/ant/build.xml 中 aapt.ignore.assets 的值參照
<property name="aapt.ignore.assets" value="<dir>crunch:!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" />
在配置好ant 的執行環境後 cd 到源碼目錄 而後執行 ant release