【问题标题】:How to get the build variant at runtime in Android Studio?如何在 Android Studio 运行时获取构建变体?
【发布时间】:2014-06-19 07:51:53
【问题描述】:

我想在运行时获取构建变体,这可以在没有任何额外配置或代码的情况下实现吗?

【问题讨论】:

  • 仅检查是否调试,if (BuildConfig.DEBUG) {}

标签: android android-studio android-gradle-plugin


【解决方案1】:

查看生成的BuildConfig 类。

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "com.example.app";
  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 = "";
}

【讨论】:

  • 因此,如果您的应用程序尚未构建,则此类将不存在,并且在构建之前使用该类会导致编译错误,不是吗?这不是鸡对蛋的场景吗?
  • BuildConfig 是在 Gradle 同步期间生成的,而不是应用程序本身的构建。
  • 友情提示为 your 应用程序包导入 BulidConfig,而不是像我一样从外部库 BuildConfig...
  • PACKAGE_NAME 好像已经被APPLICATION_ID取代了
  • @ashishduh “BuildConfig 是在 Gradle 同步期间生成的,而不是应用程序本身的构建。”不,这是不对的。只需清理项目,您就会注意到BuildConfig 消失了。它被称为 BuildConfig 是有原因的
【解决方案2】:

如果您已经在调味,则无需在您的 gradle 中提供额外的字符串字段。只需按照简单的步骤获取构建详细信息:

对于构建变体:BuildConfig.FLAVOR
对于构建版本代码:BuildConfig.VERSION_CODE
对于构建版本名称:BuildConfig.VERSION_NAME

【讨论】:

  • BuildConfig.BUILD_TYPE 应该用于构建变体。 BuildConfig.FLAVOR 应该用于您指定的任何风味。
【解决方案3】:

这里是一个示例,用于定义和获取 BuildConfig 的不同风味

android {

    defaultConfig {
        ...
    buildTypes {
        ...
    }

    flavorDimensions "default"
    productFlavors {

        develop {
            applicationIdSuffix ".dev"
            versionNameSuffix "-dev"
        }

        staging {
            applicationIdSuffix ".stg"
            versionNameSuffix "-stg"
        }

        production {
            applicationIdSuffix ""
            versionNameSuffix ""
        }
    }

    applicationVariants.all { variant ->

        def BASE_URL = ""

        if (variant.getName().contains("develop")) {
            BASE_URL = "https://localhost:8080.com/"
        } else if (variant.getName().contains("staging")) {
            BASE_URL = "https://stagingdomain.com/"
        } else if (variant.getName().contains("production")) {
            BASE_URL = "https://productdomain.com/"
        }
        variant.buildConfigField "String", "BASE_URL", "\"${BASE_URL}\""

    }
}

使用

BuildConfig.BASE_URL

【讨论】:

    【解决方案4】:

    另一种选择是为每个构建变体创建一个单独的构建配置变量,并在您的代码中使用它,如下所示:

    在您的 build.gradle 文件中:

    productFlavors {
    
        production {
            buildConfigField "String", "BUILD_VARIANT", "\"prod\""
        }
    
        dev {
            buildConfigField "String", "BUILD_VARIANT", "\"dev\""
        }       
    }
    

    在您的代码中使用它:

    if (BuildConfig.BUILD_VARIANT.equals("prod")){ // do something cool }
    

    【讨论】:

      【解决方案5】:

      你可以试试

      getPackageName(); 
      

      它将返回您在 build.gradle 中定义的内容

      productFlavours{
        flavour1{
           applicationId 'com.example.package.flavour1'
        }
        flavour2{
           applicationId 'com.example.package.flavour2'
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        • 2010-10-24
        • 1970-01-01
        相关资源
        最近更新 更多