Android自己是支持ant打包項目的,而且SDK中自帶一個build.xml文件。
經過該文件,能夠對文件進行編譯、打包、安裝等。而且支持多種方式打包,如debug或者release。
通常的,能夠按照以下方法進行操做:
首先建立一個Android工程。
工程建立好後,須要爲工程添加ant支持,即建立相應的build.xml文件。
這個文件不須要用戶本身建立,只須要執行以下命令便可:
<sdk>/tools/android update project -p <project> -t <target>android
使用:android updata project -p ./ -n OliveBoxClient -t android-10 就能夠從新生成相關文件。最重要的就是build.xmlbash
其中:
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如下的版本,因此建議選擇第一個,使其與項目設定保持一致便可。優化