很簡單的ant打包咱們只須要利用eclipse自帶的ant插件便可實現,首先配置ANDROID_HOME,右鍵 計算機->屬性->高級->環境變量,以下圖,在「系統變量」下新建一個變量,變量名爲ANDROID_HOME,變量值爲android_sdk的存放目錄html
而後,在系統變量中的Path變量裏最前面添加「%ANDROID_HOME%/tools;」;以下圖(注意有個後面有個分號)java
好了,肯定配置完畢,這樣完了以後咱們就能夠在cmd窗口中執行android命令了,若是顯示android不是系統命令,那麼檢查本身在配置ANDROID_HOME過程當中出了什麼問題吧,其實我們執行的android命令就是tools目錄下的android.bat,因此纔在Path中添加tools的路徑。android
前面咱們已經配置好ANDROID_HOME了,下面咱們進入cmd,並進入須要ant打包的工程根目錄,執行命令「android update project -p ./」,參數p表示路徑,用./表示當前路徑,執行結果以下圖:windows
而後咱們在eclipse中刷新項目,能夠看到多瞭如下兩個文件app
building.xml和local.propertiesless
咱們先不要看裏面是什麼,如今咱們已經可使用ant進行打包了,在build.xml文件上右鍵->運行方式,因爲是第一次執行ant構建,咱們選擇第二個「ant 構建」配置執行的選項targeteclipse
這裏我選的release,這些target都是sdk自帶的ant寫好的,在「xxx\android-sdk\tools\ant\build.xml」中有定義ui
執行順序能夠本身調整,「help」能夠在目標中把勾去掉。點擊運行,開始打包。若是最後打包成功了,恭喜你,你的軟件版本沒有問題,能夠跳過下面的問題。我在使用ant的時候遇到下面兩個問題致使最後打包失敗。spa
注意:ant 構建前先clean一下!.net
構建失敗
D:\Program Files\Android\android-sdk\tools\ant\build.xml:397: The Android Ant-based build system requires Ant 1.8.0 or later. Current version is 1.7.1
這個很容易解決,下載ant1.8以上就能夠了,遇到這個問題的小夥伴們能夠點擊這裏下載提取碼:66b4。我上傳的ant壓縮包。csdn資源上傳審覈真特麼噁心,我只能放在360雲盤了。
下完以後解壓便可,這裏我解壓到E盤,"E:\Ant",而後在eclipse中配置ant目錄,窗口->首選項->Ant,選擇「運行時」
以下圖點擊Ant主目錄選擇"E:\Ant"
肯定後再按照前面講的執行「ant 構建」,若是成功打包,說明沒有其餘問題了。
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.nio.BufferOverflowException
[dx] at java.nio.Buffer.nextPutIndex(Buffer.java:501)
[dx] at java.nio.HeapByteBuffer.putShort(HeapByteBuffer.java:296)
[dx] at com.android.dex.Dex$Section.writeShort(Dex.java:818)
[dx] at com.android.dex.Dex$Section.writeTypeList(Dex.java:870)
[dx] at com.android.dx.merge.DexMerger$3.write(DexMerger.java:437)
[dx] at com.android.dx.merge.DexMerger$3.write(DexMerger.java:423)
[dx] at com.android.dx.merge.DexMerger$IdMerger.mergeUnsorted(DexMerger.java:317)
[dx] at com.android.dx.merge.DexMerger.mergeTypeLists(DexMerger.java:423)
[dx] at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:163)
[dx] at com.android.dx.merge.DexMerger.merge(DexMerger.java:187)
[dx] at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
[dx] at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
[dx] at com.android.dx.command.dexer.Main.run(Main.java:230)
[dx] at com.android.dx.command.dexer.Main.main(Main.java:199)
[dx] at com.android.dx.command.Main.main(Main.java:103)
這個問題是因爲sdk的build-tools版本致使的,我在19.x版本上都遇到這個問題,更新到20或者刪掉19改用18問題解決。若是sdk Manager更新不了能夠到網上直接下載最新的sdt把build-tools目錄拷貝到當前sdk的build-tools中便可,若是安裝了低版本的能夠直接把19版本刪掉。
以上就是我遇到的兩個問題和解決方法。
若是打包成功,刷新bin目錄會發現有未簽名的apk:「xxx-release-unsigned.apk」,下面咱們要爲ant配置簽名文件和混淆文件。
數字簽名你們都知道怎麼一回事兒了,混淆代碼就是將編譯好的.class中的類名映射成一些看不出確切意義的字母,防止被反編譯。咱們在ant的配置文件中添加參數名和參數值。那咱們就要看自動生成的build.xml裏寫的是什麼東西了。
build.xml:
[html] view plaincopy
<?xml version="1.0" encoding="UTF-8"?>
<project
name="MainActivity"
default="help" >
<property file="local.properties" />
<property file="ant.properties" />
<property environment="env" />
<condition
property="sdk.dir"
value="${env.ANDROID_HOME}" >
<isset property="env.ANDROID_HOME" />
</condition>
<loadproperties srcFile="project.properties" />
<fail
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
unless="sdk.dir" />
<import
file="custom_rules.xml"
optional="true" />
<import file="${sdk.dir}/tools/ant/build.xml" />
</project>
build.xml裏面就這麼短的代碼,其實,核心部分就是最後的「<import file="${sdk.dir}/tools/ant/build.xml" />」咱們執行的release就是在/tools/ant/build.xml中定義的,那咱們本身的東西要寫在哪裏呢?看這兩句「<property file="local.properties" />」和「<property file="ant.properties" />」,local.properties已經給咱們生成了,ant.properties沒有生成,若是你須要也能夠新建一個,那麼咱們的配置就寫在local.properties中。若是不知道怎麼建立數字簽名文件,我就再囉嗦一下子,手動導出apk的時候提示選擇一個keystore,這時候能夠選擇Create new keystore,存放目錄放在當前工程根目錄下,填完後先導出一個apk,以後就能夠看到工程下有個.keystore文件了。接下來咱們就能夠配置ant打包選項了。下面來看local.properties的內容:
[html] view plaincopy
#下面這句是自動生成的
sdk.dir=D:\\Program Files\\Android\\android-sdk
#數字簽名文件
key.store=jingchen.keystore
#別名alias
key.alias=jingchen
#數字簽名的密碼
key.store.password=111111
#alias的密碼
key.alias.password=111111
#這裏設置混淆代碼,在當前項目的proguard-project.txt中編寫混淆規則
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
上面註釋都寫着。好了,到這裏咱們的ant帶簽名和代碼混淆的自動打包搞定了!
注意:ant 構建前先clean一下!這個也能夠寫到配置文件裏,下一篇文章會講到。在下一篇文章中,我將會講到如何批量多渠道打包!
個人問題:
注意,若是咱們項目中有依賴其餘項目,那麼咱們也須要把那些項目建立ant環境,好比說android應用通常會依賴android-support-v7-appcompat,這時咱們須要cd到此項目運行第二步的命令,看到有build.xml就能夠了。不然可能會看到以下錯誤:BUILD FAILED F:\android\adt-bundle-windows-x86-20140321\sdk\tools\ant\build.xml:471: Invalid