以下是build.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- TODO修改工程名 -->
<project
name="ToyBattleField_91"
basedir="../ChannelActivity"
default="release" >
<!-- 环境变量 -->
<property environment="env" />
<import file="build_cfg.xml" />
<!-- 应用的名称 -->
<property
name="appName"
value="${ant.project.name}" />
<!-- SDK目录(获取操作系统环境变量ANDROID_SDK_HOME的值) ${sdk-folder} -->
<echo>appName:${appName},
SDK目录 ${sdk-folder}
</echo>
<echo>
JDK目录 ${env.JAVA_HOME}
</echo>
<property
name="assets-dir"
value="bin_assets" />
<property
name="assets-dir-ospath"
value="${basedir}/${assets-dir}" />
<property
name="appversion"
value="1.0.0" />
<!-- ***********************************渠道必须配置****************** -->
<!-- TODO渠道名称,与libChannel,resChannel中一致 -->
<property
name="channelName"
value="91" />
<echo>
channelName: ${channelName},baseDir:${basedir}
</echo>
<!-- TODO包名,如果渠道名全为数字,则在前面加上字母,如c91 -->
<property
name="appPackage"
value="com.ourpalm.toybattlefield.c91" />
<property
name="external-lib"
value="libChannel/lib_${channelName}" />
<!-- 编译后的文件放置目录 -->
<property
name="outdir-bin"
value="bin_${channelName}" />
<!-- 资源文件目录 -->
<property
name="resource-dir"
value="resChannel/res_${channelName}" />
<!-- 配置清单文件 -->
<property
name="android-manifest-xml"
value="Manifest/Manifest_${channelName}/AndroidManifest.xml" />
<!-- 输出文件名字 -->
<property
name="out-zipalign-package"
value="${outdir-bin}/ToyBattleField_${channelName}.apk" />
<!-- so -->
<property
name="external-libs-ospath"
value="${basedir}/${external-lib}" />
<!-- ************************************************************************ -->
<!-- SDK中tools目录 -->
<property
name="sdk-tools"
value="${sdk-folder}/tools" />
<!-- SDK指定平台目录 -->
<property
name="sdk-platform-folder"
value="${sdk-folder}/platforms/android-17" />
<!-- SDK指定平台的tools目录 -->
<property
name="sdk-platform-tools"
value="${sdk-folder}/platform-tools" />
<!-- 使用到得命令 -->
<property
name="aapt"
value="${sdk-platform-tools}/aapt" />
<property
name="aidl"
value="${sdk-platform-tools}/aidl" />
<property
name="dx"
value="${sdk-platform-tools}/dx" />
<property
name="apkbuilder"
value="${sdk-tools}/apkbuilder" />
<property
name="jarsigner"
value="${env.JAVA_HOME}/bin/jarsigner" />
<property
name="zipalign"
value="${sdk-tools}/zipalign" />
<property
name="adb"
value="${sdk-platform-tools}/adb" />
<!-- 生成R文件的相对目录 -->
<property
name="outdir-gen"
value="gen" />
<!-- 生成class目录 -->
<property
name="outdir-classes"
value="${outdir-bin}" />
<property
name="outdir-classes-ospath"
value="${basedir}/${outdir-classes}" />
<!-- 编译时需要的jar,如果项目需要使用到地图服务则需要maps.jar -->
<property
name="android-jar"
value="${sdk-platform-folder}/android.jar" />
<!-- <property name="android-maps-jar" value="${sdk-folder}/add-ons/addon_google_apis_google_inc_8/libs/maps.jar" /> -->
<!-- 编译aidl文件所需的预处理框架文件framework.aidl -->
<property
name="framework-aidl"
value="${sdk-platform-folder}/framework.aidl" />
<!-- Java源文件目录 -->
<property
name="srcdir"
value="src" />
<property
name="srcdir-ospath"
value="${basedir}/${srcdir}" />
<property
name="external-lib-ospath"
value="${basedir}/${external-lib}" />
<!-- proguard所在目录 -->
<property
name="proguard-dir"
value="${sdk-folder}/tools/proguard/lib" />
<property
name="proguard-lib"
value="${proguard-dir}/proguard.jar" />
<property
name="unoptimized"
value="bin/unoptimized.jar" />
<property
name="optimized"
value="bin/optimized.jar" />
<!-- classes.dex相关变量 -->
<property
name="dex-file"
value="classes.dex" />
<property
name="dex-path"
value="${outdir-bin}/${dex-file}" />
<property
name="dex-ospath"
value="${basedir}/${dex-path}" />
<!-- 经过aapt生成的资源包文件 -->
<property
name="resources-package"
value="${outdir-bin}/resources.ap_" />
<property
name="resources-package-ospath"
value="${basedir}/${resources-package}" />
<!-- 未签名apk包 -->
<property
name="out-unsigned-package"
value="${outdir-bin}/${appName}-unsigned.apk" />
<property
name="out-unsigned-package-ospath"
value="${basedir}/${out-unsigned-package}" />
<!-- 证书文件 -->
<property
name="keystore-file"
value="${basedir}/keystore/game.keystore" /> <!-- Stoneage_keystore.keystore -->
<!-- 已签名apk包 -->
<property
name="out-signed-package"
value="${outdir-bin}/${appName}-signed.apk" />
<property
name="out-signed-package-ospath"
value="${basedir}/${out-signed-package}" />
<tstamp>
<format
locale="zh"
pattern="yyMMd"
property="DSTAMP" />
</tstamp>
<!-- 优化后apk包 -->
<property
name="out-zipalign-package-ospath"
value="${basedir}/${out-zipalign-package}" />
<target name="init" >
<echo>
${appName}
</echo>
<echo>
${DSTAMP}
</echo>
</target>
<target
name="initDir"
depends="init" >
<echo>
初始化文件夹...
</echo>
<delete dir="${outdir-classes}" />
<mkdir dir="${outdir-classes}" />
<echo>
初始化文件夹完成...
</echo>
</target>
<!-- 根据工程中的资源文件生成R.java文件 -->
<target
name="gen-R"
depends="initDir" >
<echo>
生成R.java文件...
</echo>
<exec
executable="${aapt}"
failοnerrοr="true" >
<arg value="package" />
<!-- 输出详细内容 -->
<!-- <arg value="-v" /> -->
<!-- 强制覆盖已存在的文件 -->
<arg value="-f" />
<!-- 在-J指定的位置下生成相应的包的目录 -->
<arg value="-m" />
<!-- 指定R.java文件生成的目录 -->
<arg value="-J" />
<arg value="${outdir-gen}" />
<!-- 指定配置清单文件 -->
<arg value="-M" />
<arg value="${android-manifest-xml}" />
<!-- 指定资源文件目录 -->
<arg value="-S" />
<arg value="${resource-dir}" />
<!-- 引入类库 -->
<arg value="-I" />
<arg value="${android-jar}" />
</exec>
<echo>
R.java文件生成完成...
</echo>
</target>
<!-- 编译aidl文件 -->
<target
name="aidl"
depends="gen-R" >
<echo>
开始编译.aidl文件为.java文件...
</echo>
<apply
executable="${aidl}"
failοnerrοr="true"
verbose="true" >
<!-- aidl声明的目录 -->
<arg value="-I${srcdir}" />
<!-- 指定预处理文件 -->
<arg value="-p${framework-aidl}" />
<!-- 目标文件目录 -->
<arg value="-o${outdir-gen}" />
<!-- 指定哪些文件需要编译 -->
<fileset dir="${srcdir}" >
<include name="**/*.aidl" />
</fileset>
</apply>
<echo>
aidl文件编译完成...
</echo>
</target>
<!-- 将工程中的java源文件编译成class文件 -->
<target
name="compile"
depends="aidl" >
<echo>
编译Java源文件...
</echo>
<!-- bootclasspath 指定引导类文件的位置 -->
<javac
bootclasspath="${android-jar}"
destdir="${outdir-classes}"
encoding="UTF-8"
includeantruntime="on"
srcdir="."
target="1.6"
verbose="false" >
<classpath>
<fileset
dir="${external-lib}"
includes="*.jar" />
<!--
<filelist>
<file name="${android-maps-jar}" />
</filelist>
-->
</classpath>
</javac>
<echo>
Java源文件编译完成...
</echo>
</target>
<!-- 将class文件进行混淆 -->
<property
name="progurad_cfg"
value="@proguards/proguard.cfg.${channelName}" />
<target name="optimize" depends="compile" >
<echo>
开始进行代码混淆...
</echo>
<jar
basedir="${outdir-classes}"
destfile="${unoptimized}" />
<java
failοnerrοr="true"
fork="true"
jar="${proguard-lib}" >
<!-- Dmaximum.inlined.code.length 默认值为8 设置内联代码的长度 -->
<jvmarg value="-Dmaximum.inlined.code.length=32" />
<!-- 指定配置文件 -->
<arg value="${progurad_cfg}" />
<arg value="-injars ${unoptimized}" />
<arg value="-outjars ${optimized}" />
<arg value="-libraryjars ${android-jar}" />
<!--arg value="-libraryjars ${android-maps-jar}" /-->
</java>
<delete dir="${outdir-classes}" />
<mkdir dir="${outdir-classes}" />
<unzip
dest="${outdir-classes}"
src="${optimized}" />
<delete file="${unoptimized}" />
<delete file="${optimized}" />
<echo>
代码混淆完成...
</echo>
</target>
<!-- 将.class文件转化成.dex文件 , optimize -->
<target
name="dex"
depends="optimize">
<echo>
编译文件和引用类库转化为.dex文件...
</echo>
<exec
executable="${dx}"
failοnerrοr="true" >
<arg value="--dex" />
<!-- <arg value="verbose" /> -->
<arg value="--output=${dex-ospath}" />
<!-- 要生成.dex文件的源classes和libraries -->
<arg value="${outdir-classes-ospath}" />
<arg value="${external-lib-ospath}" />
</exec>
<echo>
.dex文件转换完成...
</echo>
</target>
<!-- 将资源文件放进输出目录 -->
<target name="package-res-and-assets" >
<echo>
开始转化资源文件...
</echo>
<delete dir="${assets-dir-ospath}" />
<mkdir dir="${assets-dir-ospath}" />
<copy todir="${assets-dir-ospath}" >
<!-- 游戏自己的assets -->
<fileset dir="${basedir}/assets" >
<exclude name="**/*.svn" />
</fileset>
<!-- 渠道assets -->
<fileset dir="${basedir}/assetsChannel/assets_${channelName}" >
</fileset>
</copy>
<echo>
S:${resource-dir} A:${assets-dir} M:${android-manifest-xml} R:${resources-package}
</echo>
<exec
executable="${aapt}"
failοnerrοr="true" >
<arg value="package" />
<arg value="-f" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-A" />
<arg value="${assets-dir}" />
<arg value="-M" />
<arg value="${android-manifest-xml}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
</exec>
<echo>
资源文件转化完成...
</echo>
</target>
<!-- 打包成未签名的apk -->
<target
name="package"
depends="dex, package-res-and-assets" >
<echo>
开始打包未签名程序...
</echo>
<copy todir="${external-libs-ospath}/armeabi" >
<fileset dir="libs/armeabi" >
</fileset>
</copy>
<exec
executable="${apkbuilder}"
failοnerrοr="true" >
<arg value="${out-unsigned-package-ospath}" />
<!-- 输出详细内容 -->
<!-- <arg value="-v" /> -->
<!-- 创建未签名程序 -->
<arg value="-u" />
<!-- 指定dex文件添加到应用程序包中 -->
<arg value="-f" />
<arg value="${dex-ospath}" />
<!-- 指定资源文件添加到应用程序包中 -->
<arg value="-z" />
<arg value="${resources-package-ospath}" />
<!-- 参照源文件的目录结构 -->
<arg value="-rf" />
<arg value="${srcdir-ospath}" />
<!-- 打入so文件 -->
<arg value="-rj" />
<arg value="${external-libs-ospath}" />
<arg value="-nf" />
<arg value="${external-libs-ospath}" />
</exec>
<echo>
未签名程序打包完成...
</echo>
</target>
<!-- 对apk进行签名 -->
<target
name="jarsigner"
depends="package" >
<echo>
开始为apk文件签名...
</echo>
<exec
executable="${jarsigner}"
failοnerrοr="true" >
<!-- TODO使用游戏签名,签名/验证时输出详细信息 -->
<arg value="-verbose" />
<!-- 密钥库位置 -->
<arg value="-keystore" />
<arg value="${keystore-file}" />
<!-- 用于密钥库完整性的口令 -->
<arg value="-storepass" />
<arg value="android" />
<!-- 专用密钥的口令(如果不同) -->
<arg value="-keypass" />
<arg value="android" />
<!-- 已签名的 JAR文件的名称 -->
<arg value="-signedjar" />
<arg value="${out-signed-package-ospath}" />
<!-- 要签名的JAR文件 -->
<arg value="${out-unsigned-package-ospath}" />
<!-- 文件别名 -->
<arg value="androiddebugkey" />
</exec>
<echo>
apk文件签名完成...
</echo>
</target>
<!-- 对apk进行优化 -->
<target
name="zipalign"
depends="jarsigner" >
<echo>
开始对apk文件进行优化...
</echo>
<exec
executable="${zipalign}"
failοnerrοr="true" >
<!-- 覆盖已经存在的文件 -->
<arg value="-f" />
<!-- 输出详细内容 -->
<arg value="-v" />
<!-- 以字节为单位对齐 4 提供了32位对齐 -->
<arg value="4" />
<!-- 需要优化的apk文件 -->
<arg value="${out-signed-package}" />
<!-- 优化完成的apk文件 -->
<arg value="${out-zipalign-package}" />
</exec>
<echo>
apk文件优化完成...
</echo>
</target>
<!-- 发布 -->
<target
name="release"
depends="zipalign" >
<!-- 删除未签名apk -->
<delete file="${out-unsigned-package-ospath}" />
<delete file="${out-signed-package}" />
<echo>
APK文件生成完成,生成目录:${out-zipalign-package-ospath}
</echo>
</target>
<!-- 安装 -->
<target name="install" >
<echo>
开始安装apk文件...
</echo>
<exec
executable="${adb}"
failοnerrοr="true" >
<arg value="install" />
<arg value="${out-zipalign-package}" />
</exec>
<echo>
apk文件安装完成...
</echo>
</target>
<!-- 重新安装 -->
<target
name="reinstall"
depends="release" >
<echo>
开始卸载apk文件...
</echo>
<exec
executable="${adb}"
failοnerrοr="true" >
<arg value="uninstall" />
<arg value="${appPackage}" />
</exec>
<echo>
apk文件卸载完成...
</echo>
<echo>
开始安装apk文件...
</echo>
<exec
executable="${adb}"
failοnerrοr="true" >
<arg value="install" />
<arg value="${out-zipalign-package}" />
</exec>
<echo>
apk文件安装完成...
</echo>
</target>
<!-- 卸载 -->
<target name="uninstall" >
<echo>
开始卸载apk文件...
</echo>
<exec
executable="${adb}"
failοnerrοr="true" >
<arg value="uninstall" />
<arg value="${appPackage}" />
</exec>
<echo>
apk文件卸载完成...
</echo>
</target>
</project>
//以上是build.xml内容
打包步骤如下:
以XX渠道为例
1.准备好XX渠道的SDK_TO_CP工程包
2.libChannel中新增 lib_XX
lib_XX中放sdk中的jar包,如果sdk中包含java文件,则需放到游戏工程
3.resChannel中新增 res_XX
res_XX中放 游戏和sdk的合并之后的res
4.Manifest中新增Manifest_XX目录
manifest_XX中放 游戏和sdk的合并之后AndroidManifest.xml,修改包名
5.新建build_XXX.xml,内容拷贝build_91.xml中的内容,需修改的地方均有TODO标示
6.选中build_XXX.xml,右键运行,run as->Ant Build...->run
(2014-04-04 写于百度空间)