我正在构建一个具有不同构建变体风格的应用程序。口味是"自由"和"付费"。我想在我的java类上创建一些逻辑,只有当应用程序是"付费"时才会触发。因此,我需要一种方法来获得" applicationId"在gradle构建过程中设置,如下所示:
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文件中实现一些与味道相关的逻辑?
答案 0 :(得分:23)
我会在您的产品口味中使用构建配置变量。有点像:
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类。
答案 1 :(得分:10)
我找到了获得所有值的最佳解决方案,例如 APPLICATION_ID,BUILD_TYPE,FLAVOR,VERSION_CODE和VERSION_NAME 。
只需写:Log.d("应用程序ID:",BuildConfig.APPLICATION_ID);在你的代码中。它将提供您的味道的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/