为什么BuildConfig类使用Boolean.parseBoolean()而不是文字值?

dav*_*ber 11 android buildconfig android-gradle-plugin

在查看BuildConfig由Android Studio和Gradle插件生成的类时,可以看到该BuildConfig.DEBUG字段是使用Boolean.parseBoolean(String)调用初始化的,而不是使用其中一个布尔文字truefalse.

当我使用Gradle添加自定义构建属性时,我会这样做:

android {
    buildTypes.debug.buildConfigField 'boolean', 'SOME_SETTING', 'true'
}
Run Code Online (Sandbox Code Playgroud)

但是看看生成的信息BuildConfig告诉我谷歌采用了与DEBUG旗帜不同的方法:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");

  // more fields here

  // Fields from build type: debug
  public static final boolean SOME_SETTING = true;
}
Run Code Online (Sandbox Code Playgroud)

使用Boolean.parseBoolean(String)而不是文字有什么好处?

dav*_*ber 21

BuildConfig在您的代码中使用它们时,类中的布尔文字会产生IDE警告(至少在Android Studio中).例如,当在布尔表达式中使用它时,Android Studio会(错误地)建议简化布尔表达式,因为常量值总是相同的(对于当前的构建变体).

Android Studio因缺少构建配置知识而产生代码警告

此警告仅仅是因为Android Studio不知道BuildConfig.SOME_SETTING其他构建变体的内部最终值可能不同.

为了保持代码清洁并且没有警告,您可以通过添加如下所示的IDE注释来告诉Android Studio忽略此特定警告:

添加代码注释以忽略IDE警告

但这又会给代码增加一些噪音并降低可读性.通过使用该Boolean.parseBoolean(String)方法初始化常量字段,您实际上会欺骗Android Studio,它将无法再完全分析您的布尔表达式,从而不再生成警告.

使用parseBoolean(String)来阻止IDE警告

这种方法非常有用,因为它可以保持代码的清洁和可读性,而无需关闭重要的代码分析和生成警告.

  • @Tunga尝试在你的`defaultConfig`或任何flavor或build类型配置中执行`buildConfigField'boolean','SOME_FLAG','Boolean.parseBoolean("false")'`. (7认同)
  • 也许我遗漏了一些东西,但究竟是什么,添加到build.gradle以使用parseBoolean声明BuildConfig值? (2认同)