如何在Android中使用断言?

我想在Android设备上使用assert obj != null : "object cannot be null" 。 断言似乎不工作,所以我在网上search,我发现这个本地解决scheme:

adb shell setprop debug.assert 1

它在我的本地机器上工作。

我想运行这个命令使用我的eclipse项目(所以它会在源代码pipe理中)。 我该怎么做?

谢谢!

断言在Android中不起作用,因为大部分时间一个人没有在debugging模式下运行,而是一些优化的代码。 因此,正确的解决scheme是手动抛出一个exception,代码如下:

 if (obj==null) throw new AssertionError("Object cannot be null"); 

应该注意,通过devise,断言是用于debugging代码的,而不是用于发布时间代码的。 所以这可能不是最好的使用抛出一个断言。 但是,你仍然可以这样做,所以…

在Android 4.x设备上testing,可以在Android设备上使用Java声明:

  • 编辑/system/build.prop(例如通过X-plore ),在文件末尾添加行:debug.assert = 1
  • 重新启动手机

现在你的Android设备是合理的断言检查,并且会在断言检查失败时抛出AssertionError。

编辑:

另一个简单的方法是,启用从PC直到设备重新启动:

 platform-tools\adb shell setprop debug.assert 1 

例如,您可以创build一个.bat文件(在Windows上)并在连接设备时运行它。

if (somevar == null) throw new RuntimeException();

将RuntimeException()replace为适当的exception子types。

创build你自己的断言方法:

 public static <T> T assertNotNull(T object) { if (object == null) throw new AssertionError("Object cannot be null"); return object; } 

返回相同的对象允许在分配中使用这个简洁。

共享我在Android上用于断言的类,它更简单,具有很好的命名和非常优雅,因为它允许你写这样的断言:

 Assert.that(obj!=null, "Object should not be null"); 

这是这个类的代码:

 public class Assert { public static void that(boolean condition, String message) { if (!condition) { throw new AssertionError(message); } } } 

希望能帮助到你!