"BuildConfig.DEBUG条件检查"是什么?

24

Android Lint 抱怨使用 assert(),并建议使用BuildConfig.DEBUG条件检查代替。

我很清楚为什么在Android上不安全使用assert,但是"BuildConfig.DEBUG条件检查"究竟是什么?

以下示例代码应该如何修改?

Context ctx = getContext();
assert (ctx instanceof FragmentActivity);
fragment_manager = ((FragmentActivity) ctx).getSupportFragmentManager();
1个回答

27
我认为lint想表达的是,在assert语句中添加对BuildConfig.DEBUG的检查。

if(BuildConfig.DEBUG)

assert (ctx instanceof FragmentActivity);

这样,当您测试应用程序时,assert只会起作用,但在发布版本中,assert将不会被调用。

当您导出发布版本时,BuildConfig.DEBUG将为false。

编辑: 看起来您应该像下面这样做,而不是使用assert。

 if(BuildConfig.DEBUG && !(ctx instanceof FragmentActivity))
      throw new RuntimeException();

替换 assert。

来源:http://tools.android.com/recent/androidstudio045released

新增了一些 lint 检查,特别是一个标记断言关键字的检查。这在设备上不可靠,应使用 BuildConfig.DEBUG 进行条件检查。


1
但是在dalvik上,assert()代码没有被调用/没有完全实现,因此即使在模拟器上运行测试,也不应该使用assert()。 - Rémi
1
据我所知,可以使用debug.assert =1系统属性启用assert。 - nandeesh
我发现在Android Studio中按“bug”播放按钮或常规播放按钮时,BuildConfig.DEBUG为真。因此,在实际上没有“调试”时,我看到的会触发断言。 - Someone Somewhere
@SomeoneSomewhere - 当您使用调试配置构建 APK 时,BuildConfig.DEBUG 的值为 true。如果您是通过 ADB 或 Android Studio(而不是 Google Play 商店)安装应用,则可能正在使用调试版本。 - Anm
1
也许你想使用 AssertionError 而不是 RuntimeException - hoijui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接