android 使用ANT批量打包apk步驟

銳湃發表於2015-08-25
一、       到apache官網下載apache-ant,截止2014年12月10日最新版本是1.9.4.
下載地址:http://ant.apache.org/
file:///C:/Users/xinyuli/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
選擇上圖所示項
二、       配置環境變數(如果已經配置過ANT、Android、JAVA環境變數,可略過此步驟):
1、  配置ANT環境變數
(1)在系統環境變數中增加ANT_HOME,我的ANT解壓後放在F:\apache-ant-1.9.4,環境變數值也就是這個地址,根據你放的地方不同而不同;
(2)在path環境變數中加入
%ANT_HOME%\bin;%ANT_HOME%\lib;
注意用與之前的內容用英文分號分割;
                   配置完成後在命令列下輸入ant回車,看到以下內容就表示ANT環境變數配置成功了:
file:///C:/Users/xinyuli/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
2、  配置Android-SDK環境變數
(1)       在系統環境變數中增加ANDROID_HOME,值是你的Android-SDK存放的地址,我的在
F:\ Android-SDK;
(2)       在path環境變數中增加
%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;
以便我們可以正常使用adt工具和SDK的ant工具。梗塞完成後在命令列輸入adt,出現Android相關提示資訊說明android環境變數配置成功;
3、  配置JAVA環境變數
(1)       在系統環境變數中增加JAVA_HOME,值是你安裝JDK的路徑,我的JDK安裝在
D:\Program Files\Java\jdk1.7.0_15;
(2)       建立CLASSPATH系統變數,值為.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,注意開頭是英文的點和分號;
(3)       在path中增加
%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
                              配置完成後在命令列輸入java,出現JAVA相關提示說明JAVA環境變數配置成功。

三、       新增ant-contrib第三方jar包
因為要實現自動迴圈打包,而ant本身不支援foreach迴圈,需要引入第三方jar包,下載ant-contrib-1.0b3.jar之後把它放到ant所在目錄的lib目錄下,例如我的在F:\ apache-ant-1.9.4\lib,然後要進行關鍵的一步:右鍵點選該jar檔案à選擇“開啟方式”àWinRAR壓縮檔案管理器,依次開啟net/sf/antcontrib/antcontrib.properties,看到以下這一行:
file:///C:/Users/xinyuli/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
然後用#註釋掉if=net.sf.antcontrib.logic.IfTask這一行,這是因為ant-contrib中的if語句會與Android-SDK自帶的if語句衝突,導致報錯if doesn't support the "condition"attribute,所以我們這裡要註釋掉ant-contrib中的if語句,只使用它的foreach語句。至此ant工具就已經全部配置完成。

四、       修改AndroidManefest.xml檔案
    開啟我們要打包的工程的AndroidManifest.xml檔案,去掉裡面的中文註釋,可以用英文註釋,但是不要使用中文,否則會報錯,把<meta-data android:value="15"android:name="UMENG_CHANNEL" />放到一行上顯示,不要換行。至此AndroidManifest.xml檔案修改完畢。

五、       生成build.xml檔案與local.properties檔案
如果專案關聯了Library,必須首先在Library專案中生成build.xml檔案和local.properties檔案,方法是:開啟cmd à cd到專案所在目錄 à 執行androidupdate lib-project -p ./
執行完成後會提示生成相應的檔案,這時開啟local.properties檔案可以看到sdk.dir=安卓SDK所在目錄,如果為空說明Android環境變數配置不正確,可以手動填入SDK所在目錄,如F:\\Android-SDK,注意用兩個反斜槓,以實現轉義字元。
如果關聯了多個Library,請在每個Library中執行相應命令;
最後cd到主工程所在目錄,執行
android update project --name 工程名稱 -p ./--subprojects
同樣提示生成build.xml和local.properties檔案,如果沒有關聯Library則只需執行
android update project --name 工程名稱
即可,至此自動生成檔案步驟結束。

六、       建立ant.properties檔案
在主工程所在目錄新建ant.properties檔案,裡邊填入:
#keystore所在路徑,注意路徑用正斜槓,不要加雙引號
key.store=F:/kugou.keystore
#keystore密碼
key.store.password=xxxxx
#keystore別名
key.alias=myalias
#別名密碼
key.alias.password=xxxxx
#專案版本號
app_version=1.3.2
#UMENG渠道名稱,有些專案渠道名稱用英文字母,有些用數字,用英文逗號隔開
market_channels=2,3,4,5,6

這裡注意:keystore別名必須是英文,不能是中文,否則會報錯,如果已經寫成了中文,請在cmd中使用
keytool-changealias -keystore keystore名稱 -alias 原來的別名 -destalias 新的別名
命令修改keystore別名。至此ant.properties檔案建立成功。

七、       修改build.xml檔案
這裡所說的build.xml檔案指的主專案中我們用命令列生成的那個build.xml,在裡邊加入以下內容:

<!-- 渠道包打包指令碼  antdeploy -->
<!-- 引入第三方jar包 -->
         <taskdef resource="net/sf/antcontrib/antcontrib.properties">  
                   <classpath>
                            <pathelement location="lib/ant-contrib-1.0b3.jar"/>
                   </classpath>
         </taskdef>
<!—定義deploy命令 -->
         <target name="deploy">
                   <!—呼叫foreach迴圈 -->
            <foreachtarget="modify_manifest"list="${market_channels}"param="channel"delimiter=",">      
            </foreach>
         </target>
<!—定義修改manifest的target -->
         <target name="modify_manifest">
                   <replaceregexp flags="g" byline="false">
                            <regexp pattern='android:value="(.*)" android:name="UMENG_CHANNEL"'/>
                            <substitution expression='android:value="${channel}" android:name="UMENG_CHANNEL"'/>
                             <filesetdir=""includes="AndroidManifest.xml"/>
                   </replaceregexp>


                   <property name="out.release.file" location="${out.absolute.dir}/${ant.project.name}_${channel}.apk"/>
                   <!—呼叫ant release命令 -->
                   <antcall target="release" />
                   <!—定義apk檔案儲存路徑及檔名 -->
                   <copy tofile="${out.absolute.dir}/out/${ant.project.name}v${app_version}-${channel}.apk"file="bin/${ant.project.name}-release.apk"/>
         </target>

其中用黃色背景標出來的最終生成的apk檔案的檔名格式,可以按照需要修改,至此build.xml檔案修改完成。

八、       批量打包
進入cmd視窗,cd到專案所以目錄,執行ant deploy就可以實現批量打包,生成的apk檔案放在工程目錄下bin下的out目錄中。

九、       常見錯誤:
1、  if doesn't support the "condition"attribute錯誤:沒有修改ant-contrib-1.0b3.jar檔案,請按第三步修改ant-contrib-1.0b3.jar檔案;
2、  找不到?。???? keystroe檔案:keystore檔名稱或路徑包含中文,或者別名包含中文,請按第六步修改keystore檔案別名;
3、找不到src目錄:所有Library與主程式的原始碼都要寫在srcSource Folder中

其餘錯誤可以試執行ant clean命令或者ant release、ant debug生成單個apk檔案,然後觀察報錯資訊進行解決。

參考文獻:http://www.cnblogs.com/tt_mc/p/3891546.html

轉自:http://www.eoeandroid.com/thread-557178-1-1.html

相關文章