1. 程式人生 > >使用Ant編譯專案,舊版SDK用apkbuilder打包,新版SDK沒有apkbuilder工具,用sdklib.jar打包apk

使用Ant編譯專案,舊版SDK用apkbuilder打包,新版SDK沒有apkbuilder工具,用sdklib.jar打包apk

1、舊版SDK目錄,使用apkbuilder工具打包apk

如果你的SDK目錄是舊的,還有apkbuilder.exe工具的話,打包成apk的配置豐富如下:

<!-- 打包成未簽名的apk,使用apkbuilder命令組合classes.dex,res.zip和
	     AndroidManifest.xml為未簽名的apk -->
<target name="package" depends="dex, package-res-and-assets">
	<echo>Packaging unsigned apk for release...</echo>
	<exec executable="${apkbuilder}" failonerror="true">
	    <!-- 輸出apk的路徑 -->
		<arg value="${out-unsigned-package-ospath}" />
		
		<!-- u指建立未簽名的包-->
		<arg value="-u" />
		
		<!-- 指定前資源壓縮包路徑res.zip檔案路徑 -->
		<arg value="-z" />
		<arg value="${resources-package-ospath}" />
		
		<!-- 前面生成的dex路徑 -->
		<arg value="-f" />
		<arg value="${dex-ospath}" />
		
		<!--引用的第三方jar以及其中的資原始檔,按照一定的格式放置到apk資料夾中  -->
		<arg value="-rf" />
		<arg value="${srcdir-ospath}" />
		
		<!-- 將主專案libs下面的so庫打包 -->  
		<arg value="-nf"/>
		<arg value="${library-dir}/libs"/>
	</exec>
	<echo>It will need to be signed with jarsigner before being published.</echo>
</target>

2、沒有apkbuilder工具,用sdklib.jar打包apk

如果你有下載Android系統原始碼,會發現原始碼目錄下搜尋apkbuilder,在sdk中有個apkbuilder資料夾,裡面有個readme說明如下:

The apkbuilder command linetool is deprecated, and is not maintained anymore.

It is lacking recent buildimprovements such as support for Library Projects.

Its source code has been movedinto sdklib.

It is recommended to directlyuse the com.android.sdklib.build.ApkBuilder class instead.

就是說明此命令列工具新版本SDK目錄去掉了,不再支援使用,它的程式碼放進了sdklib.jar中,可以直接使用com.android.sdklib.build.ApkBuilder類來執行相關操作。

在這裡Ant指令碼中使用sdklib.jar的配置如下:

<!-- 打包成未簽名的apk,使用sdklib.jar將classes.dex,res.zip和
     AndroidManifest.xml為未簽名的apk -->
<target name="package" depends="dex,package-res-and-assets">
	<echo> Packaging unsigned apk for release...</echo>
	<java classpath="${sdk-tools}/lib/sdklib.jar" classname="com.android.sdklib.build.ApkBuilderMain">  
	    
	    <!-- 輸出apk的路徑 -->
		<arg value="${out-unsigned-package-ospath}" />
		
		<!-- u指建立未簽名的包-->
		<arg value="-u" />
		
		<!-- 指定前資源壓縮包路徑res.zip檔案路徑 -->
		<arg value="-z" />
		
		<!-- 資源壓縮包 -->
		<arg value="${resources-package-ospath}" />
		
		<!-- 前面已經生產的,要打包的dex壓縮檔案 -->
		<arg value="-f" />	
		<arg value="${dex-ospath}" />
		
		<!--引用的第三方jar以及其中的資原始檔,按照一定的格式放置到apk資料夾中  -->
		<arg value="-rj" />
		<arg value="${external-lib-ospath}"/>
		
		<!-- 將主專案libs下面的so庫打包 -->
		<arg value="-nf" />
		<arg value="${external-lib-ospath}" />
	</java>
</target>

注意:程式碼中路徑是我自己這裡定義的路徑變數,您使用時要根據自己專案需要和配置的路徑來說設定。