如何在Android Studio中的运行时获取构建变体?

sty*_*972 62 android android-studio android-gradle-plugin

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

ash*_*duh 100

看看生成的BuildConfig类.

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLCATION_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 = "";
}
Run Code Online (Sandbox Code Playgroud)

  • BuildConfig是在Gradle Sync期间生成的,而不是构建应用程序本身. (10认同)
  • 友情提醒导入BulidConfig为*your*app包而不是从外部库BuildConfig导入...就像我做的那样...... (4认同)
  • `PACKAGE_NAME`似乎已被`APPLICATION_ID`取代 (3认同)

che*_*711 20

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

在build.gradle文件中:

productFlavors {

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

    dev {
        buildConfigField "String", "BUILD_VARIANT", "\"dev\""
    }       
}
Run Code Online (Sandbox Code Playgroud)

要在您的代码中使用它:

if (BuildConfig.BUILD_VARIANT.equals("prod")){ // do something cool }
Run Code Online (Sandbox Code Playgroud)


Pha*_*inh 6

这是一个定义和获取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}\""

    }
}
Run Code Online (Sandbox Code Playgroud)

使用

BuildConfig.BASE_URL


yeb*_*iah 5

你可以尝试使用

getPackageName(); 
Run Code Online (Sandbox Code Playgroud)

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

productFlavours{
  flavour1{
     applicationId 'com.example.package.flavour1'
  }
  flavour2{
     applicationId 'com.example.package.flavour2'
  }
}
Run Code Online (Sandbox Code Playgroud)