使用Ant自動構建Android版本

Ant是一個很好的跨平臺構建工具,特別是對於Java項目,這裏使用它對Android工程進行自動化構建可以得到非常大的便利。一般來說對Android工程進行構建主要有以下幾個步驟:

  1. 使用aapt來編譯工程生成R.java;
  2. 使用aapt來對工程所需用的資源進行打包;
  3. 轉換並編譯AIDL文件;
  4. 編譯Java源文件並生成.class;
  5. 轉換並壓縮.class文件成.dex文件;
  6. 使用aapt打包生成未簽名的apk包;
  7. 使用jarsigner對apk包簽名並得到最終的發佈包。
關於這些步驟所需要的實現細節就不再詳述了(網格上各種版本,大多都能使用),這裏主要說一下對於多個渠道情況下的apk打包。所謂的多個渠道一般來說就需要對每個要發佈的渠道版本進行一次上述系列操作,而這多個渠道的差異通常是可以公共出來的一些配置信息,比如渠道的編號,渠道的信息等。如此一來就可以將其統一組織到一個配置文件裏邊,在進行流程前使用ant的功能對其進行具體的渠道設置就可以了,比如:
<replace file="${pathsettingfile}" token="Ant_PathID" value="${_PathID}"/>
<replace file="${pathsettingfile}" token="Ant_PathName" value="${_PathName}"/>
其中的_PathID,_PathName均爲在ant環境中定義的變量,其可以是直接從cmd傳入或通過其它方式來賦值。這樣在進行後續的編譯時就可以直接得到該渠道下的版本。
此外,還可以將所有渠道的信息統一配置於一xml之中,在進行構建時直接從其中讀入各個渠道的信息並賦值到如上的_PathID、_PathName中即可,可以用如下代碼方便實現(其中涉及xmltask在ant中的使用,這個可以參考ant的相關資料):

<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則基本上如下所示(當然其中可以置入更多的信息)
<?xml version="1.0" encoding="UTF-8"?>
<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的自動化構建還可以實現另外一個重要用途,對asset中的涉密文件進行保護。這裏有一個簡單的例子,比如asset中有一些文件對用戶可視,但卻不希望被用戶修改,這種情況下就可以在構建中加入一個文件校驗的階段,首先將要保護的文件計算出對應的MD5簽名,之後再將此簽名寫入到程序代碼中並進行編譯構建,在程序運行時使用此簽名進行校驗,如果該簽名不匹配那就意味着被用戶修改後進行了重新的打包,此時程序就可以有相應的操作,這樣就可以在一定程序上防止用戶對發佈的Apk包進行重新pack並運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章