標籤:
Android本身是支援ant打包項目的,並且SDK中內建一個build.xml檔案。
通過該檔案,可以對檔案進行編譯、打包、安裝等。並且支援多種方式打包,如debug或者release。
一般的,可以按照如下方法進行操作:
首先建立一個Android工程。
工程建立好後,需要為工程添加ant支援,即建立相應的build.xml檔案。
這個檔案不需要使用者自己建立,只需要執行如下命令即可:
<sdk>/tools/android update project -p <project> -t <target>
使用:android updata project -p ./ -n OliveBoxClient -t android-10 就可以重建相關檔案。最重要的就是build.xml
其中:
sdk為sdk的安裝目錄,其下的tools/android是我們要使用的命令。
project為項目目錄。
target為項目所使用的android的target id,也就是項目對應的android的版本。
可以將sdk的tools目錄添加到環境變數 ~/.bashrc 檔案中,重啟後生效,以後可以直接使用命令了。
可以通過執行以下命令查看當前sdk中所包含的target以及相應id:
android list targets
執行完android update project命令後,會在項目的根目錄下產生相應的ant檔案。
主要有build.xml、ant.properties、local.properties三個檔案。
如果沒有ant.properties檔案,可以自己手動添加。
其中,build.xml檔案是進行ant build的主要檔案,它引用了其它的檔案。
在local.properties檔案中定義了sdk.dir屬性,也就是當前使用的sdk的目錄。
在ant.properties檔案中,可以定義自己的一些屬性,或者重定義一些屬性。
當然,這兩個屬性檔案可有可無,直接定義到build.xml中也沒有關係。
在build.xml中的最後,引用了sdk目錄下的tools/ant/build.xml檔案。
這個是sdk預設的build檔案,可以將其內容直接拷貝過來,也可以保持當前的引用方式。
項目下的build.xml預設執行的target是help,運行後可以看到相關的協助資訊。
通過協助資訊,可以看到其它可用的target。
一般的,我們需要修改為debug或者release。
修改好之後,再運行build.xml檔案,就會執行我們需要的編譯過程了。
build.xml檔案的執行方法為:右鍵->Run As->Ant Build。
如果是debug版的話,預設會使用debug方式簽名。
如果是release版的話,需要指定相應的keystore以及私密金鑰。
否則,最後只能產生一個沒有簽名的apk檔案。
設定私密金鑰庫的方法是,在ant.properties檔案中,添加如下內容:
key.store=<keystore>
key.alias=<key>
key.store.password=<keystore pwd>
key.alias.password=<key pwd>
其中:
keystore為私密金鑰庫檔案。
key為簽名需要使用的私密金鑰。
key.store.password為私密金鑰庫的密碼。
key.alias.password為私密金鑰的密碼。
兩個密碼相關的屬性也可以不添加,而只添加私密金鑰庫及私密金鑰。
這樣的話,執行時會依次彈出相應的輸入框,提示使用者輸入相應的密碼。
這樣雖然相對繁瑣,但是由於沒有明文指定密碼,對私密金鑰庫的保護會更好一些。
如果項目引用了第三方庫的話,只需要在項目根目錄建立libs檔案夾並將其放入即可。
如果是jar庫,直接放到libs目錄下;如果是so庫,需要放到libs的名為armeabi的子目錄下。
也可以通過設定相應的屬性來指定第三方庫的位置,其預設都是libs檔案夾。
jar.libs.dir為jar類型庫所在的目錄。
native.libs.absolute.dir為so類型庫所在的目錄,即armeabi的父目錄。
如果項目包含了jni代碼,希望在打包時自動重新編譯so庫,可以修改build.xml檔案。
修改方法為,在引用sdk的build.xml檔案之前添加如下target:
<target name="-pre-build" depends="-ndk-build">
</target>
<target name="-ndk-build">
<exec executable="ndk-build" failonerror="true">
<arg value="clean" />
</exec>
<exec executable="ndk-build" failonerror="true" />
</target>
ndk-build為ndk提供的命令,需要將ndk安裝目錄添加到環境變數中,添加方法同sdk/tools。
產生的so預設會放到libs/armeabi目錄下。
使用預設的build.xml打包apk時,已經包含了混淆、簽名、對齊最佳化等相關過程。
如果是使用release的方式,最後產生的apk檔案已經可以直接發布了。
遺留問題:
目前採用這種方法產生的APK,雖然已經被簽名了,但是,安裝時錯誤,提示未簽名。
查看APK包中的簽名檔案,不是預設的CERT.*,而是<key>.*。
然後,即使將名稱修改成CERT.*,程式仍然不能正常安裝。
如果匯出debug版本,則不會有這個問題。
用ADT外掛程式匯出簽名APK,也不會有這個問題。
解決方案:
產生此問題的根本原因是JDK1.7造成的,只有運行Ant使用jre1.7的版本時,才會發生該問題。
可以通過設定運行build.xml檔案時使用的jre版本來解決,具體方法是:
選中build.xml->右鍵->Run As->External Tools Configurations,
在右側地區選中JRE標籤頁,可以看到對jre設定有三個選項:
Run in the same JRE as the workspace使用與workspace相同版本的jre。
Execution environment根據相關環境選擇一個jre版本。
Separate JRE使用一個已經安裝的jre的目前的版本。
一般項目的jre都會設定為1.7以下的版本,所以建議選擇第一個,使其與項目設定保持一致即可。
android的ant編譯打包