产品须要上不一样的渠道,不一样的渠道须要定制话,须要依赖不一样的moduleandroid
刚开始接到这个需求,心里是高兴的这还不简单。一顿操做猛如虎以下:bash
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
def channel = ""
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.testsocket"
minSdkVersion 17
targetSdkVersion 29
versionCode 1
versionName "1.0"
flavorDimensions "versionCode"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
productFlavors {
xiaomi {
channel = "xiaomi"
}
qihoo {
channel = "qihoo"
}
}
}
dependencies {
println("**********" + channel)
if (channel == "qihoo") {
//依赖不一样的module
} else if (channel == "xiaomi") {
//依赖不一样的module
}
}
复制代码
主要是在 productFlavors 中对 channel 进行赋值,而后再 dependencies 进行判断,理想很丰满,现实很骨感。坑比的是,不管我选的是xiaomi仍是qihoo的 Build Variant ,最后channel都是等于productFlavors中的最后一个,也就是qihoo,经过输出日志发现即便选定了Build Variant,productFlavors 中全部的 flavours 都会依次执行一遍,不知道啥缘由,有知道的大佬指点一下么,结果以下图:app
既然上面的方案行不通的话,得另辟蹊径了,从 gradle bulid 的日志咱们发现选定了Build Variant,执行的taskName是不同的,以下图: socket
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
def channel = ""
gradle.startParameter.getTaskNames().each { task ->
if (task.toLowerCase().contains("qihoo")) {
channel = "qihoo"
} else if (task.toLowerCase().contains("xiaomi")) {
channel = "xiaomi"
}
}
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.testsocket"
minSdkVersion 17
targetSdkVersion 29
versionCode 1
versionName "1.0"
flavorDimensions "versionCode"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
productFlavors {
xiaomi {
}
qihoo {
}
}
}
dependencies {
println("**********" + channel)
if (channel == "qihoo") {
//依赖不一样的module
} else if (channel == "xiaomi") {
//依赖不一样的module
}
}
复制代码
执行结果以下图:gradle
xiaomi ui
bingospa