ant自動打包指令碼(二)
阿新 • • 發佈:2019-01-07
融合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>