雖然谷歌一直在推gradle自動打包編譯。但是一個新的東西總是需要時間與成本的。其實做android開發不寫編譯腳本是沒問題的。但是可能有特殊情況,比如需要一次編譯多個版本,而各種版本之間的差異不大,比如只改了Androidmanifest.xml中的某些內容。這時才需要自己動手。
如何花費最少的時間,最簡單快速的完成這項工作,從而把盡力集中到開發。這是本文的目標。
要簡單要快當然是拿來用,首先在SDK的目錄下找到官方提供的.build.xml腳本。打開就會發現代碼特別多,註釋也非常多。看懂它不是我們的目標,用纔是。把這個腳本中一些部分看成功能模塊就好,不用仔細研究。(因爲谷歌每個版本.build.xml的改變都比較大,如果你修改模塊的內容,下次更新時就比較痛苦了,所以最好的辦法就是不修改,只用)。
話不多說直接上需求
1.要求一次編譯多個APK,每個項目中只有少數的幾個類不相同。
解決思路:自己定義一個target,在target中多次調用編譯打包,每次編譯打包之前把不同類替換在走一遍完整的編譯流程就行(至於完整流程包含些什麼就不用care了)。
a. 將不同的類放到項目不同的文件夾中並定義好文件路徑
b. 自定義一個target。關鍵代碼如下:
<target name="realse_ump"><!--開發-->
<!--替換開發需要的文件-->
<copy failοnerrοr="true" file="${develop-ospath}" overwrite="true" tofile="${constants-ospath}" />
<!--設置發佈jar路徑及名稱-->
<property name="obfuscated.jar.file" location="${outdir-build}/final.jar" />
<!--設置發佈APK路徑及名稱-->
<property name="out.final.file" location="${outdir-build}/final.apk" />
<antcall target="clean" />
<antcall target="release" />
<!--測試-->
<!--替換測試需要的文件-->
<copy failοnerrοr="true" file="${test-ospath}" overwrite="true" tofile="${constants-ospath}" />
<antcall target="clean" />
<antcall target="release" />
</target>