融合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"/>
<!-- 替換金剛域名 -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_JGSDK_ADDRESS"
replace="${jgsdk.address}"
byline="true"/>
<!-- 替換金剛渠道id -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_JGSDK_CHANNEL_ID"
replace="${jgsdk.channel.id}"
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-pkgname1">
<equals arg1="${channelname}" arg2="dangle" />
</condition>
<!-- 判斷當前打包的渠道爲朋友玩渠道的話 -->
<condition property="condition-equals-pkgname2">
<equals arg1="${channelname}" arg2="pengyouwan" />
</condition>
<!-- 通過上面的判斷結果來決定是否運行以下任務的邏輯 -->
<antcall target="replace-main-activity-pkgname"/>
<antcall target="replace-main-action"/>
<antcall target="replace-assest-params"/>
</target>
<!-- 部分渠道有自己的閃屏,要求閃屏後跳轉的主activity的包名,替換爲遊戲自己的包名,(目前有當樂渠道) -->
<target name="replace-main-activity-pkgname" if="condition-equals-pkgname1">
<echo>3.1、替換遊戲主activty下的包名</echo>
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="DEFAULT_GAME_MAIN_ACTIVITY_NAME"
replace="${game.main.activity.name}"
byline="true"/>
</target>
<!-- 部分渠道有自己的閃屏,要求閃屏後跳轉的主activty節點下修改爲渠道要求的action,(目前有朋友玩渠道) -->
<target name="replace-main-action" if="condition-equals-pkgname2">
<echo>3.2、替換遊戲主activty下的main action</echo>
<!-- 替換遊戲主界面activity節點下的MAIN Action -->
<replaceregexp file="${bin-manifest.xml}" encoding="UTF-8"
match="jingang.MAIN"
replace="${game.main.action}"
byline="true"/>
</target>
<!-- 輔助替換渠道參配的java代碼,(目前有朋友玩渠道) -->
<target name="replace-assest-params" if="condition-equals-pkgname2">
<echo>3.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.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>