如何确定 Android 中选择的“配置”?

How to determine selected `configuration` in Android?

在 Android Studio 中我创建了两个配置:

如何在代码中确定我选择了哪种配置?

我知道 /app/build.gradle 中有 buildConfigField 但是 buildTypes 的名称与 configuration 的名称不对应,所以我想知道这是怎么回事合体。

android {
    ...

    defaultConfig {
        ...
    }
    buildTypes {
        debug {
            ...
            buildConfigField 'boolean', 'DEBUG', 'true'
        }
        release {
            ...
        }
    }
}

我假设在 Android Studio 中,configuration 对应于 Xcode 中的 schema,而 buildConfigField 对应于 Environment Variable在 Xcode(我来自 iOS 世界)。

您可以配置不同的资源集。默认情况下 maindebug 已经存在。要在运行时确定哪个集用于构建 apk,请在每个资源集中创建一个新资源文件,例如

app/src/main/res/values/resourceset.xmlapp/src/debug/res/values/resourceset.xml

并像这样在其中放置一个字符串或整数值:

<resources>
     <string name="resource_set">debug</string>
</resources>

<resources>
     <string name="resource_set">main</string>
</resources>

然后您可以使用 getString() 获取 R.string.resource_set 的值,您可以检测使用了哪个资源集。

我正在使用此技术根据所使用的资源集包含不同的 Google API 客户端 ID(以启用 Google API 和用另一个指纹释放然后调试)。

How can I determine in code which configuration I selected?

你不需要,因为 运行 配置是 IDE 的东西,而不是 Android 的东西。

what I want is to define environment variable values that I can use in code, e.g. in a debug build variant I want to connect to the development database, in a release build variant I want to connect to the production database

None 其中与 运行 配置有关。 运行 配置是为了配置什么是 运行:

  • 主要app
  • 主要测试 app
  • something 库测试
  • 等等

debugrelease 是构建类型,是构建变体的一个维度。您可以通过 Build Variants 工具选择 运行 配置使用的构建变体,该工具默认停靠在 Android Studio IDE window.[=28 的左下角=]

要根据 debugrelease 具有不同的代码行为,您可以:

  • 检查 BuildConfig.BUILD_TYPE,它将是 debugrelease

  • 根据构建类型and/or产品风味

    [=,使用buildConfigField将值从Gradle注入BuildConfig 54=]
  • 使用resConfig给资源注入值,比如字符串资源

  • 为每个构建类型使用自定义源集(例如,src/main/ 用于您的通用代码,src/debug/ 用于特定于调试的代码,src/release/ 用于特定于发布的代码代码)