關於Android studio Gradle 實現多渠道打包

weixin_34249678發表於2016-11-24

最近專案用到了友盟的渠道,正常情況下在AndroidManifest.xml做以下修改:

android:name="UMENG_CHANNEL"

android:value="YINGYONGBAO"/>

渠道少的話可以直接修改value值直接打包即可,由於Android市場眾多,每次版本更新都需要多次打包,所以研究了下使用studio gradle 多渠道打包,首先得把value改成:

android:name="UMENG_CHANNEL"

android:value="${UMENG_CHANNEL_VALUE}"/>

其中value的值${UMENG_CHANNEL_VALUE}中的值就是你在gradle中自定義配置的值

build.gradle檔案就利用productFlavors這樣寫:

productFlavors {

default_channel{}

YingYongBao{}

JinLi{}

HuaWei{}

WanDouJia{}

}


productFlavors.all { flavor ->

flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE:name ]

}

android.applicationVariants.all { variant ->

variant.outputs.each { output ->

defoutputFile = output.outputFile

if(outputFile !=null&& outputFile.name.endsWith('.apk')) {

File outputDirectory =newFile(outputFile.parent);

deffileName

if(variant.buildType.name =="release") {

fileName="app_v${defaultConfig.versionName}_${packageTime()}_${variant.productFlavors[0].name}.apk"

}else{

fileName = "app_v${defaultConfig.versionName}_${packageTime()}_beta.apk"

}

output.outputFile =newFile(outputDirectory, fileName)}}}

其中name的值對相對應各個productFlavors的選項值;fileName對應的是打包好的名字,我是這樣寫的:

fileName="jihe_${variant.productFlavors[0].name}.apk"

build.gradle檔案中defaultConfig還需要這樣寫:

defaultConfig {

applicationId"***************"

minSdkVersion15

targetSdkVersion23

versionCode5

versionName"1.1"

manifestPlaceholders = [UMENG_CHANNEL_VALUE:"default_channel"]

}

這樣就可以多渠道打包了,如下:


3809438-08f316eb44c587df.png

你就可以選擇一次打一個包或者多個包了。

由於中間使用了jdk1.8的Lambda表示式,所以還須配置下:

下載安裝jdk8,配置JAVA8_HOME到環境變數中,配置%JAVA8_HOME%\bin到PATH

配置JDK Location,File->Project Structure->SDK Location:


3809438-7c0a15ae5b1d9ca1.png

然後在build.gradle檔案中這樣配置:

buildscript {

repositories {

jcenter()

mavenCentral()

}

dependencies {

classpath'com.android.tools.build:gradle:2.1.0'

classpath'me.tatarka:gradle-retrolambda:3.2.5'

}

}

applyplugin:'com.android.application'

applyplugin:'me.tatarka.retrolambda'

然後在build.gradle檔案中android中這樣寫:

compileOptions {

sourceCompatibility JavaVersion.VERSION_1_8

targetCompatibility JavaVersion.VERSION_1_8

}

至此Java jdk1.8的Lambda表示式 就可以使用了,友盟的多渠道打包也就不會報錯直接使用了。

相關文章