使用Android Studio可以很方便地一次編譯多個(gè)渠道包,具體步驟如下所述。
(1)在AndroidManifest.xml文件中配置CHANNEL字符串。
<meta-data
android:name="UMENG CHANNEL"
android:value="${CHANNEL VALUE}"
tools:replace="android:value"/>
(2)在項(xiàng)目中增加各渠道文件夾的相關(guān)文件。如不同渠道包連接的服務(wù)器地址不同,可以做如圖25-1所示的配置。
每個(gè)渠道包的strings.xm1文件中包含對(duì)應(yīng)的服務(wù)器地址。
<resources>
<string name="base url">http://www.xxx.com</string
|</resources>
(3)在build.gradle文件中添加如下代碼。
|productFlavors{
//編譯3個(gè)渠道包
demo3{
demo4{
demo5{
//設(shè)置每個(gè)渠道包中的渠道名稱(chēng)
productFlavors.all{ flavor->
flavor.manifestPlaceholders=[CHANNEL VALUE:n
|ame]
//把代碼的提交次數(shù)+渠道名稱(chēng)作為版本號(hào)
applicationVariants.all { variant->
if(variant.buildType.name.equals('release'))
def gitVersion=gitVersionCode()
variant.mergedFlavor.versionCode=gitVersio
variant.mergedFlavor.versionName=gitVersio
|n.tostring()+variant.mergedFlavor.manifestPlaceholder
s.CHANNEL VALUE
//按APK名+版本號(hào)+編譯時(shí)間+渠道名稱(chēng)的方式修改編譯的APK文件名稱(chēng)
applicationVariants.all { variant->
if(variant.buildType.name.equals('release'))
variant.outputs.each { output->
def outputFile=output.outputFile
if(outputFile!=null &&
outputFile.name.endsWith('release.apk)){
def fileName=
"Xxx V${variant.mergedFlavor.vers
ionName}${releaseTime()}${va
riant.productFlavors[0].name}.a
|pk”
output.outputFile=new File(outputFile.pa
//刪除xxx-unaligned.apk這類(lèi)沒(méi)有字節(jié)對(duì)齊的APK|文件
if(output.zipAlign!=null){
output.zipAlign.doLast{
output.zipAlign.inputFile.delete(
}
}
//獲取git服務(wù)器上的代碼提交次數(shù)
def gitVersionCode(){
def cmd='git rev-list HEAD--count'
cmd.execute().text.trim().toInteger()
//得到當(dāng)前時(shí)間的字符串,不能用UTC時(shí)區(qū),要用上海所在的時(shí)區(qū)(也就是北京時(shí)間)
def releaseTime(){
return new Date().format("yyyyMMddHImmss",
TimeZone.getTimeZone("Asia/Shanghai"))