Android使用Ant進行apk多渠道打包
前言:
Ant 是什麼?
詳細介紹請看http://ant.apache.org/
總之一句話:Ant是一個Apache基金會下的跨平臺的構件工具,它可以實現專案的自動構建和部署等功能。
準備工作:
android sdk中預設支援使用ant來執行編譯動作。但是要想使用ant來進行編譯,還需要ant的執行環境。
為了能順利使用ant來編譯,我們需要如下準備:
1,android sdk,最簡單的是下載一個adt bundle即可;
2,ant包,下載連結:http://ant.apache.org/bindownload.cgi,將壓縮包下載完解壓到某個目錄即可。
3,ant-contrib.jar,這個jar主要用來支援編譯的批量操作,下載地址http://mirrors.ibiblio.org/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar,下完之後放到步驟2解壓目錄的lib目錄。
參考:
關於android編譯生成apk的流程,可以參照http://www.oschina.net/code/snippet_16_6782,
其實有個偷懶的方式,就是借用 android sdk的tools/ant/目錄中build.xml檔案內已定義好的動作,主要是用到”release”。
下面主要介紹一下基於已定義好的release,怎麼修改實現自己的build.xml檔案。
步驟:
首先介紹一下build.xml檔案中變數的定義格式如下,後面會用到
1 <property name=”key_sample” value=”value_sample” />
1,對生成目錄做必要的清除動作,起名為myClean,這裡我刪除了生成目錄下的所有apk檔案。
1 <target name="myClean"> 2 <mkdir dir="${outputDir}"/> 3 <delete verbose="true"> 4 <fileset dir="${outputDir}" includes="*.apk" /> 5 </delete> 6 </target>
outputDir是我事先定義好的變數:
1 <property name=”outputDir” value=”../output”/>
2,載入渠道資訊,並使用ant的 foreach功能實現批量打包;
1 <target name="myPackChannels"> 2 <foreach target="myPackBuild" list="${build.channels}" param="build.channel" delimiter=","> 3 </foreach> 4 </target>
可以看到這裡是從 ${build.channels} 中讀取相關渠道資訊,多渠道中間用,分隔;
build.channels=101,201,301
3,將當前的AndroidMenifest.xml複製到備份目錄;
1 <target name="myBackupManifest"> 2 <delete file="${build}/${manifest}" /> 3 <copy file="${manifest}" tofile="${build}/${manifest}" overwrite="true"/> 4 </target>
4,修改當前的AndroidMenifest.xml裡面的內容,比如channel值;
1 <target name="myPrepareBuildinfo" depends="myLoadBuildInfo"> 2 <replaceregexp flags="g" byline="true" encoding="UTF-8"> 3 <regexp pattern='android:versionCode="(.*)"' /> 4 <substitution expression='android:versionCode="${buildVersionCode}"' /> 5 <fileset dir="" includes="${manifest}" /> 6 </replaceregexp> 7 <replaceregexp flags="g" byline="true" encoding="UTF-8"> 8 <regexp pattern='android:versionName="(.*)"' /> 9 <substitution expression='android:versionName="${buildVersionName}"' /> 10 <fileset dir="" includes="${manifest}" /> 11 </replaceregexp> 12 <replaceregexp flags="g" byline="true" encoding="UTF-8"> 13 <regexp pattern='android:value="@string/APP_CHANNEL"'/> 14 <substitution expression='android:value="${build.channel}"'/> 15 <fileset dir="" includes="${manifest}" /> 16 </replaceregexp> 17 </target>
我這裡執行了修改versionName,versionCode和APP_CHANNEL這三個值。
5,執行release動作;
6,針對4生成的unsigned apk 用自己的簽名檔案簽名;
1 <!-- 簽名 --> 2 <target name="mySign"> 3 <mkdir dir="${outputDir}"/> 4 <java jar="${signjar}" fork="true" failonerror="true" maxmemory="128m"> 5 <arg value="-w"/> 6 <arg value="${key_pem}"/> 7 <arg value="${key_pk8}"/> 8 <arg value="${binDir}/${build.name}-release-unsigned.apk"/> 9 <arg value="${binDir}/${build.name}-release-signed.apk"/> 10 <classpath> 11 <pathelement location="${signjar}"/> 12 </classpath> 13 </java> 14 15 <property name="outName" value="${outputDir}/${build.name}-${buildVersionName}-${buildVersionCode}-${build.channel}-${build.timestamp}-${buildNumber}"/> 16 17 18 <zipalign-helper in.package="${binDir}/${build.name}-release-unsigned.apk" 19 out.package="${outName}.apk" /> 20 <copy file="${mapping}" tofile="${outName}-mapping.txt" overwrite="true"/> 21 </target>
7,repeat step3,4,5;(這就是動作2 foreach的執行)
8,恢復之前備份的AndroidMenifest.xml到當前目錄;
1 <target name="myRestoreManifest"> 2 <copy file="${build}/${manifest}" tofile="${manifest}" overwrite="true"/> 3 <delete file="${build}/${manifest}" /> 4 </target>
最後,整理一下要執行的步驟:
1 <target name=".output" depends="myClean, myBackupManifest, myLoadBuildInfo, myPackChannels, myRestoreManifest,myUpdateBuilderNumber"> 2 </target>
so,在你的build.xml所在的目錄,執行ant .output 即可,大功告成!
相關文章
- android 使用ANT批量打包apk步驟AndroidAPK
- android Ant 批量多渠道打包 總結!Android
- Android 生成簽名apk與多渠道打包AndroidAPK
- Android 自動編譯、打包生成apk檔案 3 - 使用SDK Ant方式Android編譯APK
- Android多渠道打包Android
- 使用ANT打包Android應用Android
- Android 多渠道打包配置Android
- Android Apk 打包AndroidAPK
- Android Studio 使用Gradle多渠道打包AndroidGradle
- Android使用Gradle實現多渠道打包AndroidGradle
- Walle —— Android多渠道打包神器Android
- Android多渠道打包實踐Android
- android多渠道打包最快方案Android
- Android筆記之:App自動化之使用Ant編譯專案多渠道打包的使用詳解Android筆記APP編譯
- Android APK打包流程AndroidAPK
- Android進階之Walle多渠道打包&Tinker熱修復Android
- Android美團多渠道打包Walle整合Android
- Flutter 打包 android端 apkFlutterAndroidAPK
- 多渠道打包
- Cordova 打包 apk,html 打包 apkAPKHTML
- android gradle 多渠道打包小結AndroidGradle
- Android 多渠道打包開發記錄Android
- Android多渠道打包相關介紹Android
- 簽名打包Android版apkAndroidAPK
- Android開發 —— apk打包流程AndroidAPK
- 通過Ant將Android project編譯打包成APK檔案並安裝到手機AndroidProject編譯APK
- Android多渠道打包工具Gradle外掛使用詳解AndroidGradle
- Gradle for Android系列之五 多渠道打包GradleAndroid
- Android ant修改包名打包 (轉)Android
- Android Apk反編譯系列教程(二)APK重打包AndroidAPK編譯
- Android Studio打包專案:APKAndroidAPK
- Android自定義打包apk名稱AndroidAPK
- Android使用Ant自動編譯簽名打包詳解Android編譯
- Android Studio打包apk,aar,jar包AndroidAPKJAR
- 動態庫so打包到android apkAndroidAPK
- Android 詳解Gradle(3.1.4)實現多渠道打包AndroidGradle
- Gradle For Android(二) 多渠道打包與簽名配置GradleAndroid
- Gradle 實現 Android 多渠道定製化打包GradleAndroid