融合SDK ant自动打包脚本,可以循环打包,采用源工程(主工程)和依赖库的形式
<?xml version="1.0" encoding="UTF-8"?>
<project name="AndroidProjectBuild" default="build">
<!-- ========================================本地环境配置============================ -->
<!-- SDK版本号配置 -->
<property file="project.properties" />
<!-- Android SDK路径、项目路径、签名信息、渠道名在该文件中配置 -->
<property file="build.properties" />
<!-- 游戏参数配置文件 -->
<import file="config.xml" optional="true" />
<!-- SDK目录(获取操作系统环境变量ANDROID_SDK_HOME的值) -->
<property environment="env" />
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
<isset property="env.ANDROID_HOME" />
</condition>
<!-- ========================================外部引用的插件============================= -->
<!-- 插件包,循环方法 -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${ant.lib.dir}/ant-contrib-1.0b3.jar" />
<!-- 自定义utils jar包,java代码用于辅助替换渠道参数 -->
<property name="build-ant-utils" value="${ant.lib.dir}/build-ant-utils.jar"/>
<!-- xmltask包 -->
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
<!-- 安卓SDK自带插件包antlibs -->
<taskdef resource="anttasks.properties" classpath="${sdk.dir}/tools/lib/ant-tasks.jar" />
<!-- =======================================使用的安卓SDK工具路径============================== -->
<!-- SDK指定平台目录 -->
<property name="sdk-platform-android" value="${sdk.dir}/platforms/android-22"/>
<!-- SDK中tools目录 -->
<property name="sdk-tools" value="${sdk.dir}/tools" />
<!-- SDK指定平台中tools目录 -->
<property name="sdk-build-tools-android" value="${sdk.dir}/build-tools/22.0.1" />
<!-- 使用到的命令(当前系统为windows,如果系统为linux,可将.bat文件替换成相对应的命令) -->
<property name="aapt" value="${sdk-build-tools-android}/aapt" />
<property name="aidl" value="${sdk-build-tools-android}/aidl" />
<property name="dx" value="${sdk-build-tools-android}/dx.bat" />
<!--优化APK工具 Windows(改为 zipalign.exe)-->
<property name="zipalign" value="${sdk-build-tools-android}/zipalign.exe" />
<!-- sdklib -->
<property name="sdklib" value="${sdk-tools}/lib/sdklib.jar" />
<!-- 签名工具 -->
<!-- <property name="jarsigner" value="D:\jdk\JDK1.8_AnZhuangLuJing\jdk1.8.0_131\bin\jarsigner" /> -->
<!-- 编译需要的jar; 如果项目使用到地图服务则需要maps.jar -->
<property name="android-jar" value="${sdk-platform-android}/android.jar" />
<!-- 编译aidl文件所需的预处理框架文件framework.aidl -->
<property name="framework-aidl" value="${sdk-platform-android}/framework.aidl" />
<!-- <property name="aapt.ignore.assets" value="" /> -->
<property name="aapt.ignore.assets" value="<dir>crunch:!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" />
<!-- =======================================工程目录配置================================= -->
<!-- 编译工程的路径 -->
<property name="basedir" value="." />
<!-- apk生成目录 -->
<property name="outdir-buildApk" value="${ant.dir}/buildApk" />
<!-- java源文件目录 -->
<property name="project-src" value="${basedir}/src" />
<!-- 外部类库所在目录 -->
<property name="project-libs" value="${basedir}/libs" />
<!-- res资源文件目录 -->
<property name="project-res" value="${basedir}/res" />
<!-- assets资源文件目录 -->
<property name="project-asset" value="${basedir}/assets" />
<!-- 生成R文件的相对目录 -->
<property name="project-gen" value="${basedir}/gen" />
<!-- 编译后的文件放置目录 -->
<property name="project-bin" value="${basedir}/bin" />
<!-- 清单文件 -->
<property name="project-manifest.xml" value="${basedir}/AndroidManifest.xml" />
<!-- bin目录下生成classes的目录 -->
<property name="bin-classes" value="${project-bin}/classes" />
<!-- bin目录下的classes.dex相关变量 -->
<property name="bin-classes.dex" value="${project-bin}/classes.dex" />
<!-- bin目录下的经过aapt生成的资源包文件 -->
<property name="resources.ap_" value="resources.ap_" />
<property name="library-resources.ap_" value="library-resources.ap_" />
<!-- bin目录下的经过aapt生成的资源包文件 -->
<property name="bin-resources.ap_" value="${project-bin}/${resources.ap_}" />
<property name="bin-library-resources.ap_" value="${project-bin}/${library-resources.ap_}" />
<!-- bin目录下生成classes的目录 -->
<property name="bin-res" value="${project-bin}/res" />
<!-- bin目录下的清单文件 -->
<property name="bin-manifest.xml" value="${project-bin}/AndroidManifest.xml" />
<!-- 合并manifest开关 true为合并,false不合并 -->
<property name="manifestmerger.enabled" value="true" />
<!-- ====================================================开始打包============================================= -->
<!-- 签名证书配置 -->
<target name="init-sign">
<echo>================================================start===============================================</echo>
<echo>初始化签名证书配置</echo>
<!--获取当前时间-->
<tstamp>
<format property="TODAY_CN" pattern="yyyyMMdd_HHmmss" locale="zh"/>
</tstamp>
<!-- 证书文件 -->
<property name="keystore-file" value="${ant.dir}/keystore/release.keystore" />
<!-- 未签名apk包 -->
<property name="unsigned-package" value="${project-bin}/${game.appname}-unsigned.apk" />
<!-- 已签名apk包 -->
<property name="signed-package" value="${project-bin}/${game.appname}-.apk" />
<!-- 优化后最终生成的apk包 -->
<property name="zip-signed-package" value="${outdir-buildApk}/${game.appname}_${channelname}_${TODAY_CN}.apk" />
</target>
<!-- 初始化依赖库配置 -->
<target name="init-library" depends="init-sign">
<echo>初始化依赖库配置</echo>
<!-- Library工程名 -->
<property name="library-name" value="JGSDK_Channel_${channelname}" />
<!-- Library工程路径 -->
<property name="library-path" value="${ant.dir}/channel/${library-name}" />
<!-- Library工程res文件路径 -->
<property name="library-res" value="${library-path}/res" />
<!-- Library工程src文件路径 -->
<property name="library-src" value="${library-path}/src" />
<!-- Library工程libs文件路径 -->
<property name="library-libs" value="${library-path}/libs" />
<!-- Library工程assets文件路径 -->
<property name="library-assets" value="${library-path}/assets" />
<!-- Library工程AndroidManifest.xml文件路径 -->
<property name="library-manifest.xml" value="${library-path}/AndroidManifest.xml" />
<!-- 依赖库配置,等同于eclipse工程中project.properties文件里“android.library.reference.1=../JgCommonChannel” -->
<property name="android.library.reference.1" value="../channel/${library-name}"/>
</target>
<!-- 初始化工作 -->
<target name="init" depends="init-library">
<echo>1、初始化</echo>
<!-- 加载项目属性,解析Android目标,库依赖项并用结果设置一些属性。
所有属性名称都作为参数以结束方式传递。-->
<gettarget
androidJarFileOut="project.target.android.jar"
androidAidlFileOut="project.target.framework.aidl"
bootClassPathOut="project.target.class.path"
targetApiOut="project.target.apilevel"
minSdkVersionOut="project.minSdkVersion" />
<echo> </echo>
<!-- 清楚本地bin gen文件 -->
<delete dir="${project-bin}" />
<delete dir="${project-gen}" />
<delete dir="${library-path}/bin" />
<delete dir="${library-path}/gen" />
<mkdir dir="${project-bin}" />
<mkdir dir="${project-gen}" />
<mkdir dir="${bin-classes}" />
<mkdir dir="${bin-res}"/>
<mkdir dir="${outdir-buildApk}" />
<!-- 先备份一份主工程下的assets文件 -->
<copy todir="assets1" overwrite="true">
<fileset dir="assets"/>
</copy>
<!-- 复制依赖库的assets文件到主工程assets文件夹中,完成assets的合并 -->
<copy todir="assets" overwrite="true">
<fileset dir="${library-path}/assets"/>
</copy>
</target>
<!-- 合并依赖库清单文件 -->
<target name="merge-library" depends="init">
<echo>2、合并依赖库清单文件;当前依赖库: ${library-name} </echo>
<!-- 配置依赖dependency -->
<dependency
libraryFolderPathOut="project.library.folder.path"
libraryPackagesOut="project.library.packages"
libraryManifestFilePathOut="project.library.manifest.file.path"
libraryResFolderPathOut="project.library.res.folder.path"
libraryBinAidlFolderPathOut="project.library.bin.aidl.folder.path"
libraryRFilePathOut="project.library.bin.r.file.path"
libraryNativeFolderPathOut="project.library.native.folder.path"
jarLibraryPathOut="project.all.jars.path"
targetApi="${project.target.apilevel}"
renderscriptSupportMode="false"
buildToolsFolder="false"
renderscriptSupportLibsOut="project.rs.support.libs.path"
verbose="true" />
<!-- 合并mergemanifest -->
<mergemanifest
appManifest="${project-manifest.xml}"
outManifest="${bin-manifest.xml}"
enabled="${manifestmerger.enabled}">
<library refid="project.library.manifest.file.path" />
</mergemanifest>
<!-- 调用获取渠道参数任务 -->
<antcall target="${channelname}"></antcall>
</target>
<!-- 根据工程中的资源文件生成R.java文件 depends="merge-library" -->
<target name="gen-R" depends="merge-library">
<echo>4、生成R文件</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<!-- <arg value="-f" /> -->
<arg value="-m" />
<arg value="-J" />
<arg value="${project-gen}" />
<arg value="-S" />
<arg value="${project-res}" />
<arg value="-S" />
<arg value="${library-res}" /> <!-- 依赖库res的路径-->
<arg value="-A" />
<arg value="${project-asset}" />
<arg value="-A" />
<arg value="${library-assets}" /><!-- 依赖库的assets资源路径 -->
<arg value="-M" />
<arg value="${bin-manifest.xml}" />
<arg value="--extra-packages" />
<arg value="${library-name}" /><!-- 依赖库的包名 -->
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="--auto-add-overlay" /> <!-- 这个重要,覆盖资源,不然报错-->
</exec>
</target>
<!-- 编译aidl文件 -->
<target name="aidl" depends="gen-R">
<echo>5、编译aidl文件</echo>
<apply executable="${aidl}" failonerror="true">
<!-- 指定预处理文件 -->
<arg value="-p${framework-aidl}"/>
<!-- aidl声明的目录 -->
<arg value="-I${project-src}"/>
<!-- 目标文件目录 -->
<arg value="-o${project-gen}"/>
<!-- 指定哪些文件需要编译 -->
<fileset dir="${project-src}">
<include name="**/*.aidl"/>
</fileset>
</apply>
</target>
<!-- 将工程中的java源文件编译成class文件 -->
<target name="compile" depends="aidl">
<echo>6、编译依赖库java文件</echo>
<javac encoding="utf-8" target="1.7" source="1.7" fork="true" srcdir="." destdir="${bin-classes}" bootclasspath="${android-jar}" includeantruntime="false">
<src path="${library-src}" /> <!-- 库应用源码 -->
<src path="${project-gen}" /> <!-- gen文件 -->
<classpath>
<fileset dir="${project-libs}" includes="*.jar"/>
<fileset dir="${library-libs}" includes="*.jar"/> <!-- 第三方jar包需要引用,用于辅助编译 -->
<filelist>
<file name="${android-maps-jar}"/>
</filelist>
</classpath>
</javac>
<echo> </echo>
<echo>7、编译源工程java文件</echo>
<javac encoding="utf-8" target="1.7" source="1.7" fork="true" srcdir="." destdir="${bin-classes}" bootclasspath="${android-jar}" includeantruntime="false">
<src path="${project-src}" /> <!-- 工程源码 -->
<src path="${project-gen}" /> <!-- gen文件 -->
<classpath>
<fileset dir="${project-libs}" includes="*.jar"/>
<fileset dir="${library-libs}" includes="*.jar"/> <!-- 第三方jar包需要引用,用于辅助编译 -->
<filelist>
<file name="${android-maps-jar}"/>
</filelist>
</classpath>
</javac>
</target>
<!-- 将.class文件转化成.dex文件 -->
<target name="dex" depends="compile">
<echo>8、将class文件转化成dex文件</echo>
<exec executable="${dx}" failonerror="true">
<arg value="--dex" />
<!-- 输出dex文件 -->
<arg value="--output=${bin-classes.dex}" />
<!-- 要生成.dex文件的源classes和libraries -->
<arg value="${bin-classes}" />
<arg value="${project-libs}"/>
<arg value="${library-libs}"/>
</exec>
</target>
<!-- 更新预处理的PNG缓存 -->
<target name="crunch">
<echo>9.1、更新预处理的PNG缓存</echo>
<exec executable="${aapt}" taskName="crunch">
<arg value="crunch" />
<arg value="-v" />
<arg value="-S" />
<arg path="${project-res}" />
<arg value="-C" />
<arg path="${bin-res}" />
</exec>
<exec executable="${aapt}" taskName="crunch">
<arg value="crunch" />
<arg value="-v" />
<arg value="-S" />
<arg path="${library-res}" />
<arg value="-C" />
<arg path="${bin-res}" />
</exec>
</target>
<!-- 将资源文件放进输出目录 -->
<target name="package-res-and-assets" depends="crunch">
<echo>9.2、将资源文件放进输出目录</echo>
<aapt executable="${aapt}"
command="package"
manifest="${bin-manifest.xml}"
assets="${project-asset}"
androidjar="${android-jar}"
apkfolder="${project-bin}"
nocrunch="true"
resourcefilename="${resources.ap_}"
resourcefilter=""
libraryResFolderPathRefid="project.library.res.folder.path"
libraryPackagesRefid="project.library.packages"
libraryRFileRefid="project.library.bin.r.file.path"
previousBuildType="release"
buildType="release"
ignoreAssets="${aapt.ignore.assets}">
<res path="${bin-res}" />
<res path="${project-res}" />
</aapt>
</target>
<!-- 将资源文件放进输出目录 -->
<!-- <target name="package-res-and-assets" depends="crunch">
<echo>9.2、将资源文件放进输出目录</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="${bin-manifest.xml}" />
<arg value="-S" />
<arg value="${bin-res}" />
<arg value="-S" />
<arg value="${library-res}" />
<arg value="-A" />
<arg value="${project-asset}" />
<arg value="-A" />
<arg value="${library-assets}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${bin-resources.ap_}" />
<arg value="- -auto-add-overlay" />
</exec>
</target> -->
<!-- 打包成未签名的apk -->
<target name="package" depends="dex,package-res-and-assets">
<echo>10、打包成未签名的apk</echo>
<java classpath="${sdklib}" classname="com.android.sdklib.build.ApkBuilderMain">
<!-- 输出apk的路径 -->
<arg value="${unsigned-package}" />
<!-- u指创建未签名的包-->
<arg value="-u" />
<!-- 指定前资源压缩包路径res.zip文件路径 -->
<arg value="-z" />
<arg value="${bin-resources.ap_}" />
<!-- 前面已经生产的,要打包的dex压缩文件 -->
<arg value="-f" />
<arg value="${bin-classes.dex}" />
<arg value="-rf" />
<arg value="${project-src}" />
<!--引用的第三方jar以及其中的资源文件,按照一定的格式放置到apk文件夹中 -->
<arg value="-rj" />
<arg value="${project-libs}"/>
<arg value="-rj" />
<arg value="${library-libs}"/>
<!-- 将主项目libs下面的so库打包 -->
<arg value="-nf" />
<arg value="${project-libs}" />
<arg value="-nf" />
<arg value="${library-libs}" />
</java>
</target>
<!-- 对apk进行签名 -->
<target name="jarsigner" depends="package">
<echo>11、对apk进行签名</echo>
<!-- 两种签名方式,这里采用signapk方式 -->
<!-- <exec executable="${jarsigner}" failonerror="true">
<arg value="-sigalg" />
<arg value="SHA1withRSA" />
<arg value="-digestalg" />
<arg value="SHA1" />
<arg value="-keystore" />
<arg value="${keystore-file}" /> 签名证书
<arg value="-storepass" />
<arg value="${keystore-pass}" /> 证书密码
<arg value="-keypass" />
<arg value="${keystore-alias-pass}" /> 证书密码
<arg value="-signedjar" />
<arg value="${signed-package}" /> 签名后输出位置
<arg value="${unsigned-package}"/>
不要忘了证书的别名
<arg value="${keystore-alias}"/>
</exec> -->
<!-- signapk签名方式 -->
<signapk
input="${unsigned-package}"
output="${signed-package}"
keystore="${keystore-file}"
storepass="${keystore-pass}"
alias="${keystore-alias}"
keypass="${keystore-alias-pass}"/>
</target>
<!-- zipalign优化android程序 优化之前把main文件删除-->
<target name="zipalign_sign" depends="jarsigner">
<echo>12、 zipalign 优化</echo>
<exec executable="${zipalign}" failonerror="true">
<arg value="-v" />
<arg value="-f" />
<arg value="4" /> <!--4字节对齐的优化-->
<arg value="${signed-package}" />
<arg value="${zip-signed-package}" /> <!-- 优化后输出位置 -->
</exec>
</target>
<!-- 打包成功,删除未签名的apk -->
<target name="delete_cache_apk" depends="zipalign_sign">
<echo>13、删除未签名的apk</echo>
<delete file="${unsigned-package}"/>
<delete file="${signed-package}"/>
<!-- 删除第一步中主工程中合并后的assets文件夹 -->
<delete dir="assets" />
<!-- 将备份的assets1文件改名为assets -->
<move file="assets1" tofile="assets"/>
</target>
<!-- 打包生成路径 -->
<target name="release" depends="delete_cache_apk">
<echo>14、打包成功,apk路径:${zip-signed-package}</echo>
<antcall target="update-back-packagename"/>
</target>
<!-- 将工程中涉及修改包名的目录修改回默认的,以便下次打包 -->
<target name="update-back-packagename">
<echo>15、将工程中涉及修改包名的目录修改回默认的</echo>
<!-- 获取项目清单包 -->
<xpath input="${bin-manifest.xml}"
expression="/manifest/@package" output="project.app.package.name" />
<!-- 修改工程中引用到该类的包路径 -->
<replaceregexp flags="g" encoding="UTF-8" byline="true">
<regexp pattern="import(.*)${project.app.package.name}.R"/>
<substitution expression="import ${game.default.package.name}.R"/>
<fileset dir="${library-src}" includes="**/*.java"/>
</replaceregexp>
<!-- 修改工程中所有类的package路径 -->
<replaceregexp flags="g" encoding="UTF-8" byline="true">
<regexp pattern="${project.app.package.name}"/>
<substitution expression="${game.default.package.name}"/>
<fileset dir="${library-src}" includes="**/*.java"/>
</replaceregexp>
<!-- 判断当前打包的渠道为朋友玩渠道的话 -->
<condition property="condition-equals-pkgname2">
<equals arg1="${channelname}" arg2="pengyouwan" />
</condition>
<antcall target="replace-back-assest-params"/>
</target>
<!-- ============================渠道参数替换================================== -->
<!-- 修改应用程序的包名、应用名、渠道参数 -->
<target name="replace-params">
<echo>3、修改应用程序的包名、应用名、渠道参数</echo>
<!-- 替换工程中的占位符包名,该操作直接修改的bin目录下的AndroidManifest.xml -->
<replaceregexp flags="g" encoding="UTF-8" byline="true">
<regexp pattern="${game.default.package.name}"/>
<substitution expression='${game.packge.name}'/>
<fileset dir="${project-bin}" includes="AndroidManifest.xml"/>
</replaceregexp>
<!-- 替换工程中java文件引用到R文件路径 -->
<replaceregexp flags="g" encoding="UTF-8" byline="true">
<regexp pattern="import(.*)${game.default.package.name}.R"/>
<substitution expression="import ${game.packge.name}.R"/>
<fileset dir="${library-src}" includes="**/*.java"/>
</replaceregexp>
<!-- 替换工程中所有类的package路径 -->
<replaceregexp flags="g" encoding="UTF-8" byline="true">
<regexp pattern="${game.default.package.name}"/>
<substitution expression="${game.packge.name}"/>
<fileset dir="${library-src}" includes="**/*.java"/>
</replaceregexp>
<!-- 修改工程包名package -->
<xmltask source="${bin-manifest.xml}" dest="${bin-manifest.xml}" encoding="utf-8" >
<attr path="//manifest" attr="package" value="${game.packge.name}" />
</xmltask>
<!-- 修改版本号 -->
<xmltask source="${bin-manifest.xml}" dest="${bin-manifest.xml}" encoding="utf-8" >
<attr path="//manifest" attr="android:versionCode" value="${game.version.code}" />
</xmltask>
<!-- 修改版本名称 -->
<xmltask source="${bin-manifest.xml}" dest="${bin-manifest.xml}" encoding="utf-8" >
<attr path="//manifest" attr="android:versionName" value="${game.version.name}" />
</xmltask>
<!-- 修改应用名 -->
<xmltask source="${bin-manifest.xml}" dest="${bin-manifest.xml}" encoding="utf-8" >
<attr path="//manifest/application" attr="android:label" value="${game.appname}.${channelname}" />
</xmltask>
<!-- =================金刚参数============== -->
<!-- 替换金刚gameID -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_JGSDK_GAME_ID"
replace="${jgsdk.game.id}"
byline="true"/>
<!-- 替换金刚secret -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_JGSDK_SECRCT"
replace="${jgsdk.secret}"
byline="true"/>
<!-- 替换金刚渠道id -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_JGSDK_CHANNEL_ID"
replace="${jgsdk.channel.id}"
byline="true"/>
<!-- 替换金刚域名 -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_JGSDK_ADDRESS"
replace="${jgsdk.address}"
byline="true"/>
<!-- =================渠道参数============== -->
<!-- 替换渠道SDK APP_ID -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_APP_ID"
replace="${channelsdk.app.id}"
byline="true"/>
<!-- 替换渠道SDK微信APP_ID -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_WEIXIN_APP_ID"
replace="${channelsdk.weixin.app.id}"
byline="true"/>
<!-- 替换渠道SDK APP_KEY -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_APP_KEY"
replace="${channelsdk.app.key}"
byline="true"/>
<!-- 替换渠道SDK APP_SECRET -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_APP_SECRET"
replace="${channelsdk.app.secret}"
byline="true"/>
<!-- 替换渠道SDK privatekey -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_PRIVATEKEY"
replace="${channelsdk.private.key}"
byline="true"/>
<!-- 替换渠道SDK GAME_ID -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_GAME_ID"
replace="${channelsdk.game.id}"
byline="true"/>
<!-- 替换渠道SDK PAY_ID -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_PAY_ID"
replace="${channelsdk.pay.id}"
byline="true"/>
<!-- 替换渠道SDK LOGIN_ID -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_LOGIN_ID"
replace="${channelsdk.login.id}"
byline="true"/>
<!-- 替换渠道SDK LOGIN_KEY -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_LOGIN_KEY"
replace="${channelsdk.login.key}"
byline="true"/>
<!-- 替换渠道SDK MERCHANT_ID -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SDK_MERCHANT_ID"
replace="${channelsdk.merchant.id}"
byline="true"/>
<!-- 替换渠道SDK 服务器标识 -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_CHANNEL_SERVER_SEQ_NUM"
replace="${channelsdk.server.seq.num}"
byline="true"/>
<!-- 修改开发模式,true调试模式,false正式 -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_DEBUG"
replace="${channelsdk.debug}"
byline="true"/>
<!-- 判断当前打包的渠道为朋友玩渠道的话 -->
<condition property="condition-equals-pkgname2">
<equals arg1="${channelname}" arg2="pengyouwan" />
</condition>
<!-- 通过上面的判断结果来决定是否运行以下任务的逻辑 -->
<antcall target="replace-assest-params"/>
</target>
<!-- 辅助替换渠道参配的java代码,(目前有朋友玩渠道) -->
<target name="replace-assest-params" if="condition-equals-pkgname2">
<echo>3.1、替换assest下的配置文件里的参数为游戏的</echo>
<java classname="ReplaceAssestParams" fork="true" failonerror="true" >
<classpath>
<pathelement path="${build-ant-utils}" />
</classpath>
<!-- 传入的参数,第一个是默认占位符,第二个gamekey,第三个要修改的配置文件路径,使用空格分开,
这里调用的ReplaceAssestParams类,只处理三个参数 -->
<arg line="DEFAULT_GAME_KEY ${channelsdk.game.key} ${library-assets}"/>
</java>
</target>
<!-- 将参配替换回原来的占位符的java代码,(目前有朋友玩渠道) -->
<target name="replace-back-assest-params" if="condition-equals-pkgname2">
<echo>3.2、替换assest下的配置文件里的参数为原始默认的</echo>
<java classname="ReplaceBackAssestParams" fork="true" failonerror="true" >
<classpath>
<pathelement path="${build-ant-utils}" />
</classpath>
<!-- 传入的参数,要修改的配置文件路径,使用空格分开, -->
<arg line="${library-assets}"/>
</java>
</target>
<!-- ================输入渠道名打包或者全部打包===================== -->
<!-- 根据输入的渠道名打包 -->
<target name="build">
<echo>所有渠道名:${allchannelname}</echo>
<input addproperty="channelname">请输入要打包的渠道名</input>
<antcall target="release"/>
</target>
<!--全部打包 -->
<target name="build-all">
<foreach target="release" list="${allchannelname}" param="channelname" delimiter=",">
</foreach>
</target>
</project>