Ant打包APK

除了使用IDE将android工程打包生成APK之外,我们也可以使用Ant对android工程进行打包。使用Ant对android工程进行打包的好处在于我们可以根据自己的需要定制打包流程。下面就来详细说说通过Ant对android工程进行打包生成APK的过程。

一、首先是我们的准备工作,需要android工程:

这就是我们打包需要的android工程目录,我们打包一个android工程需要的最基本的文件包括:

资产文件 assets

第三方库 libs

资源文件 res

源代码 src

清单文件 AndroidManifest.xml

二、android工程准备好,我们还需要准备打包需要的工具,这些工具都在SDK当中。主要的工具有:

aapt 根据资源文件生成R文件

aidl 生成AIDL协议对应的java文件

dx 将class文件编译为dex文件

apkbuilder 将所有文件打包为apk

jarsigner 对apk进行签名

这些工具都在SDK当中,但是在SDK的r22.6.2版本Google不再提供apkbuilder.bat这个批处理命令,但是我们还是能够通过将apkbuilder.bat复制到新版本SDK的对应目录来使用其对android工程进行打包。

三、下面就详细说说每一个命令在打包过程中具体的执行。

1、根据工程中的资源文件生成R.java文件

<target name="gen-R" depends="initapk">
		<echo>Generating R.java from the resources...</echo>
		<exec executable="${aapt}" failοnerrοr="true">
			<arg value="package" />
			<arg value="-f" />
			<arg value="-m" />
			<arg value="-J" />
			<arg value="${dir-gen}" />
			<arg value="-S" />
			<arg value="${resource-dir}" />
			<arg value="-M" />
			<arg value="${manifest-xml}" />
			<arg value="-I" />
			<arg value="${android-jar}" />
		</exec>
	</target>
2、编译aidl文件

<target name="aidl" depends="gen-R">
		<echo>Compiling .aidl into java files...</echo>
		<apply executable="${aidl}" failοnerrοr="true">
			<!-- 指定预处理文件 -->
			<arg value="-p${framework-aidl}"/>
			<!-- aidl声明的目录 -->
			<arg value="-I${srcdir}"/>
			<!-- 目标文件目录 -->
			<arg value="-o${dir-gen}"/>
			<!-- 指定哪些文件需要编译 -->
			<fileset dir="${srcdir}">
    			<include name="**/*.aidl"/>
			</fileset>
		</apply>
	</target>
3、将工程中的java源文件编译成class文件

<target name="compile" depends="aidl">
		<echo>Compiling java source code...</echo>
		<javac encoding="utf-8" target="1.6" srcdir="${project}" destdir="${dir-classes}" bootclasspath="${android-jar}">
			<classpath>
				<fileset dir="${external-lib}" includes="*.jar"/>
			</classpath>
		</javac>		
	</target>

4、将.class文件转化成.dex文件

<target name="dex" depends="compile">
		<echo>Converting compiled files and external libraries into a .dex file...</echo>
		<exec executable="${dx}" failοnerrοr="true">
			<arg value="--dex" />
			<!-- 输出文件 -->
			<arg value="--output=${dex-ospath}" />
			<!-- 要生成.dex文件的源classes和libraries -->
			<arg value="${dir-classes-ospath}" />
			<arg value="${external-lib-ospath}"/>
		</exec>
	</target>

5、对资源文件进行输出生成_res文件

<target name="package-res-and-assets" depends="dex">
		<echo>Packaging resources and assets...</echo>
		<exec executable="${aapt}" failοnerrοr="true">
			<arg value="package" />
			<arg value="-f" />
			<arg value="-M" />
			<arg value="${manifest-xml}" />
			<arg value="-S" />
			<arg value="${resource-dir}" />
			<arg value="-A" />
			<arg value="${asset-dir}" />
			<arg value="-I" />
			<arg value="${android-jar}" />
			<arg value="-F" />
			<arg value="${resources-package}" />
		</exec>
	</target>

6、打包成未签名的apk

<target name="package" depends="dex, package-res-and-assets">
		<echo>Packaging unsigned apk for release...</echo>
		<exec executable="${apkbuilder}" failοnerrοr="true">
			<arg value="${out-unsigned-package-ospath}" />
			<arg value="-u" />
			<arg value="-z" />
			<arg value="${resources-package-ospath}" />
			<arg value="-f" />
			<arg value="${dex-ospath}" />
			<arg value="-rf" />
			<arg value="${srcdir-ospath}" />
		</exec>
		<echo>It will need to be signed with jarsigner before being published.</echo>
	</target>

对android工程进行打包,其实就是将上面生成的文件压缩到名为apk的压缩包内,并且对其配置清单文件。apk也是一个压缩文件,将apk的文件类型改成zip,用解压缩软件打开,可以看到apk压缩包目录下的所有文件,如图:



7、对apk进行签名

<target name="jarsigner" depends="package">
		<echo>Packaging signed apk for release...</echo>
		<exec executable="${jarsigner}" failοnerrοr="true">
			<arg value="-keystore" />
			<arg value="${keystore-file}" />
			<arg value="-storepass" />
			<arg value="123456" />
			<arg value="-keypass" />
			<arg value="123456" />
			<arg value="-signedjar" />
			<arg value="${out-signed-package-ospath}" />
			<arg value="${out-unsigned-package-ospath}"/>
			<arg value="release"/>
		</exec>
	</target>

对apk进行签名使用的是JDK自带的签名工具,需要先生成对应的keystone,然后使用该keystone对apk进行签名。

8、发布

<target name="release" depends="jarsigner">
		<!-- 删除未签名的apk -->
		<delete file="${out-unsigned-package-ospath}"/>
		<echo>APK is released. path:${out-signed-package-ospath}</echo>
	</target>
上面的过程参考了 http://blog.csdn.net/liuhe688/article/details/6679879,非常感谢博主的总结。

四、上面对apk进行打包的操作,详细展示了android工程打包为apk文件的过程,但是从SDK的r22.6.2版本,Google不再SDK当中提供apkbuilder.bat,虽然现在能够继续使用,但是不推荐这种方式进行打包,其实android的SDK默认已经为我们提供打包脚本,我们只需要执行命令就能够对指定的工程进行打包。在SDK的tools目录下我们发现一个名为android的命令,如图:


这个命令就是SDK提供给我们对android工程进行打包的命令,执行android命令,能够在指定工程生成build.xml文件,只需要执行该文件即可完成打包的过程。下面我们使用该命令对android工程进行打包。

1、执行android

<target name="build">
		<echo>build ant build.xml from project...</echo>
		<exec executable="${android}" failοnerrοr="true">
			<arg value="update" />
			<arg value="project" />
			<arg value="-n"/>
			<arg value="${app-name}"/><!-- 指定生产app的名称 -->
			<arg value="-p" />
			<arg value="${project-res}" />
			<arg value="-t" />
			<arg value="${android-version}" />
		</exec>
	</target>

其中,-n指定APP的名称,-p指定需要生成build.xml文件的android工程,-t表示使用的SDK的android的版本。

执行该命令之后,进入到工程的根目录,我们可以看到,工程当中多出如下的文件,这就是SDK替我们生成的打包文件,其中主要用到build.xml对工程进行打包。


2、向工程的根目录复制名为ant.properties的属性文件,该属性文件的内容:

key.store=keystone的路径
key.alias=keystone的别名
key.store.password=密钥
key.alias.password=密钥
生成的build.xml文件需要该属性文件对apk进行签名,打开build.xml文件我们可以看到如图:


build.xml文件当中引用到ant.properties属性文件,继续往下看,如图:


可以看到其实在这个build.xml文件当中,引用到SDK自带的build.xml,其实打包的主要过程都是在SDK自带的build.xml当中进行的。

3、指定打包操作

在工程的根目录下执行ANT命令,就可以进行打包操作,SDK默认提供两种方式的ant命令

debug模式

release模式

五、使用SDK生成的build.xml文件进行打包,不仅执行过程非常简单,而且对于依赖工程的打包也非常方便,所以更推荐使用该种方式进行打包。




 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是两种Python打包apk的方式: 1. 使用python-for-android打包apk 可以使用python-for-android工具为Android创建一个包。具体步骤如下: 1)安装依赖项 ```shell sudo apt-get update sudo apt-get install build-essential ccache git libncurses5:i386 libstdc++6:i386 zlib1g:i386 openjdk-8-jdk unzip ant ``` 2)安装python-for-android ```shell sudo pip install python-for-android ``` 3)创建一个新项目 ```shell p4a apk --private /path/to/your/project --package org.test.myapp --name "My Application" --version 0.1 --bootstrap=sdl2 ``` 其中,/path/to/your/project是你的项目路径,org.test.myapp是你的应用程序包名称,My Application是你的应用程序名称,0.1是你的应用程序版本号,sdl2是你的应用程序引导程序。 4)构建APK ```shell cd /path/to/your/project p4a apk --private . --package org.test.myapp --name "My Application" --version 0.1 --bootstrap=sdl2 --debug ``` 其中,--debug选项用于构建调试版本的APK。 2. 使用Buildozer打包apk 可以使用Buildozer工具自动完成整个过程。具体步骤如下: 1)安装依赖项 ```shell sudo apt-get update sudo apt-get install -y python3-pip build-essential git python3-setuptools libffi-dev ``` 2)安装Buildozer ```shell sudo pip3 install buildozer ``` 3)创建一个新项目 ```shell buildozer init ``` 4)编辑buildozer.spec文件 ```shell nano buildozer.spec ``` 在文件中设置应用程序名称、版本、包名、依赖项等。 5)构建APK ```shell buildozer android debug deploy run ``` 其中,debug选项用于构建调试版本的APK,deploy选项用于将APK部署到连接的设备上,run选项用于在设备上运行应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值