美文网首页
Gradle 通过 projectFalvour 多渠道配置 d

Gradle 通过 projectFalvour 多渠道配置 d

作者: Shark_Li | 来源:发表于2019-10-28 13:50 被阅读0次

Gradle 通过 projectFalvour 多渠道配置 dependencies

需求

产品需要上不同的渠道,不同的渠道需要定制话,需要依赖不同的module

踩坑

刚开始接到这个需求,内心是高兴的这还不简单。一顿操作猛如虎如下:

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 都会依次执行一遍,不知道啥原因,有知道的大佬指点一下么,结果如下图:

result.jpg

填坑

既然上面的方案行不通的话,得另辟蹊径了,从 gradle bulid 的日志我们发现选定了Build Variant,执行的taskName是不一样的,如下图:


image

我们就就可以通过不同的taskName来判断对channel进行赋值了,如下:


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
    }
}

执行结果如下图:

xiaomi


image

qihoo

image

bingo

相关文章

网友评论

      本文标题:Gradle 通过 projectFalvour 多渠道配置 d

      本文链接:https://www.haomeiwen.com/subject/kxpquctx.html