Ant自動コンパイルパッケージandroidプロジェクト(二)----署名とチャネルパッケージ


前編ではantを使用して既存のandroidプロジェクトを自動的にコンパイルしてパッケージ化する方法について説明しましたが、antパッケージアプリケーションに署名情報を追加したり、チャネルパッケージを自動的にパッケージ化したりする方法についても引き続き説明します.
1.署名情報を入力:
プロジェクトのルートディレクトリの下にantを作成します.propertiesファイルは、keystoreパスワードとaliasパスワードを指定しなくてもよい(漏洩防止)と入力し、コマンド実行中に入力を要求します.
#keystore   ,       
key.store=E:/wp_android_sample/me.key
#keystore   
#key.store.password=*****
#alias 
key.alias=me
#alias  
#key.alias.password=******     

プロジェクトルートディレクトリの下でant releaseコマンドを実行すると、署名とalignedされたapkを生成し、binディレクトリの下で生成されたapk(your_project_name-release.apk)を生成できます.
2.自動梱包チャネルパッケージ:
バッチ・ループ・パッケージングを実現するには、Antのコア・パッケージに関連するForループのTaskがないforループに似た機能が必要です.すなわち、forループはサポートされていませんが、antはサードパーティの拡張パッケージをサポートし、より多くの他の機能をサポートします.
そこで、forループをサポートする拡張パッケージをダウンロードします.オープンソースのAnt-contribパッケージを使用できます.ダウンロード先:http://ant-contrib.sourceforge.net/ .
ダウンロードした解凍したjarファイルはantのlibディレクトリに格納されます.次に、チャネルパッケージをパッケージ化できます.具体的な方法は、次のとおりです.
(1)まずant.propertiesファイルに属性market_を追加channels(チャネルリスト、カンマで分割)、version(アプリケーションバージョン名)
#      
market_channels=91,360,wandoujia,baidu
#   
version=1.2.1

(2)我々のプロジェクトのbuild.xmlには、次のコードが追加されます.
	<!--          ant deploy-->
	
	<taskdef resource="net/sf/antcontrib/antcontrib.properties">
		<classpath>
			<pathelement location="lib/ant-contrib-1.0b3.jar"/>
		</classpath>
	</taskdef>
	
	<target name="deploy">
	   <foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=",">
	   </foreach>
	</target>
	
	<target name="modify_manifest">
		<replaceregexp flags="g" byline="false">
			<!--        android:value="*****" android:name="UMENG_CHANNEL" -->
			<regexp pattern='android:value="(.*)" android:name="UMENG_CHANNEL"' />
			<!--           android:value="   " android:name="UMENG_CHANNEL" -->
			<substitution expression='android:value="${channel}" android:name="UMENG_CHANNEL"' />  
			<!--              AndroidManifest.xml -->
			<fileset dir="" includes="AndroidManifest.xml" />
		</replaceregexp>
		<property name="out.release.file" location="${out.absolute.dir}/${ant.project.name}_${channel}.apk" />
		<!--  -->
		<antcall target="release" />
		<!--      bin/out    -->
		<copy tofile="${out.absolute.dir}/out/${ant.project.name}v${version}-${channel}.apk" file="bin/${ant.project.name}-release.apk"/>
	</target>

プロジェクトルートディレクトリの下でant deployコマンドを実行すると、各チャネルの署名パッケージ(全過程で自動的に実行できるように、ant.propertiesファイルのkeystoreのパスワードを指定できます.これにより、実行中に手動でパスワードを入力する必要はありません).binディレクトリのoutディレクトリの下にあります.