android使用ant從新編譯打包apk

最近在一個android項目中遇到了這樣一個需求,對於不一樣的客戶須要不一樣的apk名稱,icon,並對apk進行不一樣的配置。 java

從原理上講,這是比較簡單的,無非是對values/string.xml中相關字段進行修改,將相應的圖標放置到對應的drawble文件夾下等。但這在實現過程當中遇到了一些問題,現記錄下來與諸君共享。咱們知道打包編譯後的apk實質上是一個壓縮包,將apk後綴改爲zip後解壓咱們能夠看到有以下文件: android

咱們能夠看到,android爲了提升文件讀取效率,將values文件夾下的全部xml文件都編譯進了resource.arsc的二進制文件中,若咱們直接對resources.arsc進行修改,將會比較麻煩,故決定採起ant從新編譯的方式來實現。 程序員

apk的編譯過程分爲如下幾個階段: apache

1.用aapt命令生成R.java文件
2.用aidl命令生成相應java文件
3.用javac命令編譯java源文件生成class文件
4.用dx.bat將class文件轉換成classes.dex文件
5.用aapt命令生成資源包文件resources.ap_
6.用apkbuilder.bat打包資源和classes.dex文件,生成unsigned.apk
7.用jarsinger命令對apk認證,生成signed.apk windows

由上述步驟咱們能夠看到,如果手工去實現這些步驟會很是繁瑣,幸虧咱們有ant,能夠幫助咱們方便的來處理這些事情。 測試

瞭解了這些原理,讓咱們來看看是如何使用ant來編譯apk的。 ui

步驟一、 this

下載ant,顧名思義,咱們須要使用ant,下載地址,到官網上下載對應的版本吧個人版本是 spa

Apache Ant(TM) version 1.9.3 命令行

步驟二、

   配置ANT_HOME以及PATH,對於這兩個配置相信java程序員必定不陌生了,故名思議,ANT_HOME爲ant的解壓目錄,path爲ANT_HOME/bin。配置好後測試一下,打開cmd,輸入ant -verbose。若出現對應ant版本號,則說明配置成功了。

注:期間我遇到了這個問題

Unable to locate tools.jar. Expected to find it in C:/Program Files/Java/jre/lib/tools.jar

將C:/Program Files/Java/jdk/lib下的tools.jar拷貝到 C:/Program Files/Java/jre/lib下便可解決

步驟三、

使用anroid adt自帶的android.bat對項目工程進行更新。android.bat路徑在對應sdk\tools下,如個人在F:\android\adt\sdk\tools下。

在cmd窗口中敲入以下命令:

#更新項目
android.bat update project --name ATest -t 6 -p f:/test/android/ATest

其中

--name     爲項目名稱

-t              android編譯版本

-p             項目路徑

上述命令將會在項目中自動建立相應所需的build.xml等。

若在更新時候出現以下問題:

Error: Target id '16' is not valid. Use 'android.bat list targets' to get the target ids.

則先輸入以下代碼來查詢目前所支持的android編譯版本。

android.bat list targets

步驟四、

相關資源準備。

一、將打包簽名所需store拷貝到項目路徑下

二、在項目的根目錄下建一個ant.properties文件(注:有些系統下使用的是local.properties的文件),輸入以下內容,其中keystore密碼和alias密碼能夠不指定(防泄漏),那麼在命令執行的過程當中會要求你輸入

key.store=release.keystore
key.store.password=antPassword
key.alias.password=antPassword
key.alias=release
proguard.config=proguard.cfg

步驟五、

使用ant運行項目。

在cmd命令行輸入

ant release

其中曾經遇到過這個問題,主要是未引入keystore所至,將能夠store拷貝到項目下便可:

BUILD FAILED
D:android-sdk-windows\tools\ant\build.xml:650: The following error occurred while executing this line:
D:android-sdk-windows\tools\ant\build.xml:691: null returned: 1

若無問題,則會在對應的bin目錄下看到生成好的apk啦。

release:
BUILD SUCCESSFUL
Total time: 18 seconds
相關文章
相關標籤/搜索