ant自動打包腳本

融合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="&lt;dir&gt;crunch:!.svn:!.git:.*:&lt;dir&gt;_*:!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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章