Android - 如何获取Flavor的ApplicationId

14

我正在开发一个带有不同构建变体口味的应用程序。这些味道是“免费”和“付费”。我想在我的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”最终成为应用程序编译后的“包名称”?如果是这样,那么获取“application ID”或“package name”的最佳方法是什么,以便我可以在我的Java文件中实现特定于品味的逻辑?

2个回答

29

我会在你的产品风格中使用构建配置变量。例如:

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 类。


9

我找到了获取所有值的最佳解决方案,例如APPLICATION_ID、BUILD_TYPE、FLAVOR、VERSION_CODE和VERSION_NAME

只需在代码中写入:Log.d("Application Id : ",BuildConfig.APPLICATION_ID);即可。它将提供您Flavor的APPLICATION_ID。

BuildConfig.java

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "";
}

更多详细信息,请参阅此链接:http://blog.brainattica.com/how-to-work-with-flavours-on-android/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接