Android在代码中使用Gradle Build风格,如if case

Ste*_*lis 56 android build android-gradle-plugin

我正在尝试使用构建口味.在我的build.gradle中,我定义了两种口味,一种正常的味道和一种管理风味.

基本上,admin flavor在主活动上有一个额外的按钮.

我知道我可以为不同的风格定义不同的包/类.但有没有办法根据风味添加/删除一段代码?

基本上我需要两个版本的Activity.但我不想要两个完整不同版本的活动并维护它们.

所以在我的活动中我想做

=> gradle检查味道是否为'admin'=>如果是,则添加该按钮的代码

这可能吗?或者您是否需要两种不同的物理活动,因此在您之后添加功能时可以维护它们.

mix*_*xel 100

BuildConfig.FLAVOR为您提供组合的产品风味.因此,如果您只有一个风味维度:

productFlavors {
    normal {
    }

    admin {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以检查一下:

if (BuildConfig.FLAVOR.equals("admin")) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是如果你有多个风味尺寸:

flavorDimensions "access", "color"

productFlavors {
    normal {
        dimension "access"
    }

    admin {
        dimension "access"
    }

    red {
        dimension "color"
    }

    blue {
        dimension "color"
    }
}
Run Code Online (Sandbox Code Playgroud)

也有BuildConfig.FLAVOR_accessBuildConfig.FLAVOR_color领域,所以你应该看看这样的:

if (BuildConfig.FLAVOR_access.equals("admin")) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

BuildConfig.FLAVOR包含完整的风味名称.例如,adminBlue.


use*_*850 58

要避免条件中的纯字符串,可以定义布尔属性:

productFlavors {
    normal {
        flavorDimension "access"
        buildConfigField 'boolean', 'IS_ADMIN', 'false'
    }

    admin {
        flavorDimension "access"
        buildConfigField 'boolean', 'IS_ADMIN', 'true'
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

if (BuildConfig.IS_ADMIN) {
    ...
}
Run Code Online (Sandbox Code Playgroud)