Ant是1個很好的跨平臺構建工具,特別是對Java項目,這里使用它對Android工程進行自動化構建可以得到非常大的便利。1般來講對Android工程進行構建主要有以下幾個步驟:
使用aapt來編譯工程生成R.java;
使用aapt來對工程所需用的資源進行打包;
轉換并編譯AIDL文件;
編譯Java源文件并生成.class;
轉換并緊縮.class文件成.dex文件;
使用aapt打包生成未簽名的apk包;
使用jarsigner對apk包簽名并得到終究的發布包。
關于這些步驟所需要的實現細節就不再詳述了(網格上各種版本,大多都能使用),這里主要說1下對多個渠道情況下的apk打包。所謂的多個渠道1般來講就需要對每一個要發布的渠道版本進行1次上述系列操作,而這多個渠道的差異通常是可以公共出來的1些配置信息,比如渠道的編號,愛加密推出的免費APP渠道信息管理平臺,服務包括渠道數據的監測,盜版APP的辨認和分析,開發者通過使用愛加密渠道監測服務可以方便的管理APP所有推行渠道,1站掌握所有信息。渠道監測平臺還可以幫助開發者第1時間發現盜版APP,保護公司合法權益。http://www.ijiami.cn/Channels
如此1來就能夠將其統1組織到1個配置文件里邊,在進行流程前使用ant的功能對其進行具體的渠道設置就能夠了,比如:
[html] view plaincopy
<replace file="${pathsettingfile}" token="Ant_PathID" value="${_PathID}"/>
<replace file="${pathsettingfile}" token="Ant_PathName" value="${_PathName}"/>
其中的_PathID,_PathName均為在ant環境中定義的變量,其可以是直接從cmd傳入或通過其它方式來賦值。這樣在進行后續的編譯時就能夠直接得到該渠道下的版本。
另外,還可以將所有渠道的信息統1配置于1xml當中,在進行構建時直接從其中讀入各個渠道的信息并賦值到如上的_PathID、_PathName中便可,可以用以下代碼方便實現(其中觸及xmltask在ant中的使用,這個可以參考ant的相干資料):
[html] view plaincopy
<target name="main">
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
<echo>Starting....</echo>
<xmltask source="Paths.xml">
<call path="/PathList/PathDetail[@enabled='true']" target="build">
<param name="_PathID" path="ID/text()"/>
<param name="_PathName" path="Name/text()"/>
</call>
</xmltask>
</target>
對應的渠道配置xml則基本上以下所示(固然其中可以置入更多的信息)
[html] view plaincopy
<?xml version="1.0" encoding="UTF⑻"?>
<PathList>
<PathDetail name="" enabled="true">
<ID>11111</ID>
<Name>Path_0</Name>
</PathDetail>
<PathDetail name="" enabled="true">
<ID>22222</ID>
<Name>Path_1</Name>
</PathDetail>
</PathList>
另外,使用Ant的自動化構建還可以實現另外1個重要用處,對asset中的涉密文件進行保護。這里有1個簡單的例子,比如asset中有1些文件對用戶可視,但卻不希望被用戶修改,這類情況下就能夠在構建中加入1個文件校驗的階段,首先將要保護的文件計算出對應的MD5簽名,以后再將此簽名寫入到程序代碼中并進行編譯構建,在程序運行時使用此簽名進行校驗,如果該簽名不匹配那就意味著被用戶修改落后行了重新的打包,此時程序就能夠有相應的操作,這樣就能夠在1定程序上避免用戶對發布的Apk包進行重新pack并運行。
對Android app,dex源碼文件安全性是最重要的,因此,這個dex源碼加密保護其實很有必要,在這個方面,可以做到的有愛加密這個平臺,不同類型的利用也有不同的加密保護方案,詳細可以在這里了解: http://www.ijiami.cn/appprotect_mobile_games