最近项目用到了友盟的渠道,正常情况下在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"]
}
这样就可以多渠道打包了,如下:
你就可以选择一次打一个包或者多个包了。
由于中间使用了jdk1.8的Lambda表达式,所以还须配置下:
下载安装jdk8,配置JAVA8_HOME到环境变量中,配置%JAVA8_HOME%\bin到PATH
配置JDK Location,File->Project Structure->SDK Location:
然后在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表达式 就可以使用了,友盟的多渠道打包也就不会报错直接使用了。