(一)准备
1.Android SDK环境配置
(1)环境变量——系统变量:新建ANDROID_HOME:E:/androdi/sdk(这里是你自己的SDK地址)
(2)在Path变量中加入:%Android_HOME%\platform-tools;%Android_HOME%\tools; (注意中英文符号)
(3)检验环境配置是否成功:命令行下,输入android -version
(4)注意:升级4.2版本后tools目录下没有了apkbuilder.bat文件,需要自行搜索下载一个。
2.ant安装与环境搭建
(1)下载不必多说,https://ant.apache.org/bindownload.cgi官网下载合适的版本即可
(2)环境变量——系统变量:新建ANT_HOME:E:\apache-ant-1.9.3(尽量在根目录,严禁中文目录!)
(3)Path变量中加入:%ANT_HOME%\bin;
(4)检验ant是否配置成功:命令行下,输入ant -version
(二)生成keystore
由于apk的打包的最后步骤需要签名,而签名需要引入keystore,因此简单介绍一下keystore的生成方法。
命令行下输入:keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
按照提示一步一步进行下去即可,结束后会在当前目录下生成android.keystore文件,拷贝到你的工程目录下。
(三)ant脚本打包apk
1.在该工程目录下新建,build.xml,local.properties,project.properties三个文件
2.总结一下打包所需要的文件有:build.xml,local.properties,project.properties,android.keystore四个文件
3.下面对各个文件内容单独进行分析:
(1)project.properties
只有一行内容:target=android-17 (定义android版本)
(2)local.properties
#sdk目录
sdk.dir=E:/sky/WorkFiles/android_development/adt-bundle-windows-x86-20130717/sdk
#工程目录结构
project_new=你的apk名称
reasedAPK=${project_new}.apk
org_project.dir=你的工程目录
build.dir=${org_project.dir}/build
project.dir=${org_project.dir}/temp
classes.dir=${project.dir}/bin/classes
buildtemp.dir=${project.dir}/build
src.dir=${project.dir}/src
res.dir=${project.dir}/res
gen.dir=${project.dir}/gen
asset.dir=${project.dir}/asset
#keystore信息
key.store=${org_project.dir}/android.keystore
key.alias=android.keystore
key.store.password=生成keystore时的密码
key.alias.password=生成keystore时的密码
<?xml version="1.0" encoding="UTF-8"?>
<project name="CMCCSpeedTest" default="help">
<property file="local.properties" />
<property environment="env" />
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
<isset property="env.ANDROID_HOME" />
</condition>
<loadproperties srcFile="project.properties" />
<!-- quick check on sdk.dir -->
<fail
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
unless="sdk.dir"
/>
<import file="custom_rules.xml" optional="true" />
<import file="${sdk.dir}/tools/ant/build.xml" /> <!-- 引入sdk的build.xml,可以研究一下它的部分代码 -->
<!--相关环境及工具配置,根据自己的实际情况配置相应路径,需要灵活处理,此部分实际上是覆盖了sdk的build.xml中部分环境配置的定义-->
<property name="sdk.platformtools" value="${sdk.dir}/platform-tools" />
<property name="sdk.tools" value="${sdk.dir}/tools" />
<property name="sdk.build-tools" value="${sdk.dir}/build-tools/android-4.2.2" />
<property name="aapt" value="${sdk.build-tools}/aapt.exe" />
<property name="adb" value="${sdk.platformtools}/adb.exe" />
<property name="dx" value="${sdk.build-tools}/dx.bat" />
<property name="apkbuilder" value="${sdk.tools}/apkbuilder.bat" />
<property name="android.jar" value="${sdk.dir}/platforms/android-17/android.jar" />
<!--初始化工程目录-->
<target name="init">
<delete dir="${build.dir}"></delete>
<mkdir dir="${build.dir}"/>
<delete dir="${project.dir}"></delete>
<mkdir dir="${project.dir}"/>
<copy todir="${project.dir}">
<fileset dir="${org_project.dir}" includes="**/*"/>
</copy>
</target>
<!--生成R.java文件 ${sdk.dir}\platform-tools\aapt.exe-->
<target name="genRJava">
<exec executable="${aapt}" failonerror="true">
<arg value="package"/>
<arg value="-m"/>
<arg value="-J"/>
<arg value="${project.dir}/gen"/>
<arg value="-M"/>
<arg value="${project.dir}/AndroidManifest.xml"/>
<arg value="-S"/>
<arg value="${res.dir}"/>
<arg value="-I"/>
<arg value="${android.jar}"/>
</exec>
</target>
<!-- 项目编译 -->
<target name="compile" >
<javac encoding="UTF-8" target="1.5" debug="true" extdirs=""
srcdir="${gen.dir};${src.dir}"
destdir="${classes.dir}" bootclasspath="${android.jar}">
<classpath>
<fileset dir="${project.dir}/libs" includes="*.jar">
</fileset>
</classpath>
</javac>
</target>
<!-- 生成dex文件 ${sdk.dir}\platform-tools\dx.bat -->
<target name="dex" >
<apply executable="${dx}" failonerror="true" parallel="true">
<arg value="--dex"/>
<arg value="--output=${buildtemp.dir}/classes.dex"/>
<arg path="${classes.dir}"/>
<fileset dir="${project.dir}/libs" includes="*.jar"/>
</apply>
</target>
<!-- 打包资源文件 ${sdk.dir}\platform-tools\aapt.exe -->
<target name="packageRes">
<exec executable="${aapt}" failonerror="true">
<arg value="package"/>
<arg value="-f"/>
<arg value="-M"/>
<arg value="${project.dir}/AndroidManifest.xml"/>
<arg value="-S"/>
<arg value="${res.dir}"/>
<arg value="-A"/>
<arg value="${asset.dir}"/>
<arg value="-I"/>
<arg value="${android.jar}"/>
<arg value="-F"/>
<arg value="${buildtemp.dir}/resources.ap_"/>
</exec>
</target>
<!-- 打包Apk -->
<target name="你的APK名称" depends="init,genRJava,compile,dex,packageRes">
<!-- 打包 -->
<exec executable="${apkbuilder}" failonerror="true">
<arg value="${buildtemp.dir}/unsigntest.apk"/>
<arg value="-u"/>
<arg value="-z"/>
<arg value="${buildtemp.dir}/resources.ap_"/>
<arg value="-f"/>
<arg value="${buildtemp.dir}/classes.dex"/>
<arg value="-rf"/>
<arg value="${src.dir}"/>
<arg value="-rj"/>
<arg value="${project.dir}/libs"/>
</exec>
<signjar
jar="${buildtemp.dir}/unsigntest.apk"
signedjar="${build.dir}/${reasedAPK}"
keystore="${key.store}"
storepass="${key.store.password}"
alias="${key.alias}"
keypass="${key.alias.password}"
verbose="-verbose"/>
</target>
</project>
4.命令行进入该工程目录下,输入命令:ant release ,至此build成功!会有一个APk在bin目录下生成。 (四)接下来的工作 1.需要明确在工程引入第三方lib包的情况下如何解决引包不全的问题解决方案。 2.研究如何指定特定目录生成APK,而非默认路径。