Android - 如何获取 Flavor 的 ApplicationId

标签 android gradle android-productflavors

我正在构建一个具有不同构建变体风格的应用程序。口味是“免费”和“付费”。我想在我的 java 类上创建一些逻辑,只有当应用程序是“付费”时才会触发这些逻辑。因此,我需要一种方法来在 gradle 构建过程中设置“applicationId”,如下所示:

gradle.build

    productFlavors {
    free {
        applicationId "com.example.free"
        resValue "string", "app_name", "Free App"
        versionName "1.0-free"
    }
    paid {
        applicationId "com.example.paid"
        resValue "string", "app_name", "Paid App"
        versionName "1.0-paid"
    }

一旦我有了应用程序 ID,我就可以做这样的事情:

    if(whateverpackageid.equals("paid")) {
      // Do something or trigger some premium functionality.
    } 

我是否正确地说,在 gradle 构建过程中,一旦应用程序被编译,“applicationId”最终会变成“包名称”?如果是这样,获取“应用程序 ID”或“程序包名称”的最佳方法是什么,以便我可以在我的 Java 文件中实现一些依赖于风格的逻辑?

最佳答案

我会在您的产品变种中使用构建配置变量。类似的东西:

productFlavors {
    free {
        applicationId "com.example.free"
        resValue "string", "app_name", "Free App"
        versionName "1.0-free"
        buildConfigField "boolean", "PAID_VERSION", "false"
    }
    paid {
        applicationId "com.example.paid"
        resValue "string", "app_name", "Paid App"
        versionName "1.0-paid"
        buildConfigField "boolean", "PAID_VERSION", "true"
    }
}

然后在构建之后你可以使用:

if (BuildConfig.PAID_VERSION) {
    // do paid version only stuff
}

添加属性后,您可能必须在 gradle 上执行同步/构建,然后才能编译和导入 Gradle 为您生成的 BuildConfig 类。

关于Android - 如何获取 Flavor 的 ApplicationId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813776/

相关文章:

maven - 如何在 Gradle 生成的 POM 中声明存储库

android - 提供的jar依赖不起作用

android - 在 Activity 中动态查看和隐藏微调器

java - `.build()` 在 Google Analytics for Android 的上下文中做什么?

Android裁剪图像质量问题

android - 特定 flavor +类型组合的 list

android - 在gradle buildType中动态设置versionNameSuffix

android - 在 Android 中隐藏 RadioButton

java - NoClassDefFoundError : android. support.v4.util.ContainerHelpers

android - Flutter - 根据 Android 产品风格设置目标文件