有时在AOSP源代码中,我将private static final boolean
调试标志与false
视为ïts值。如果此标志为true
,则有调试输出。像this这样的东西:
private static final boolean DEBUG_DRAW = false;
private static final Paint DEBUG_DRAW_PAINT;
static {
DEBUG_DRAW_PAINT = DEBUG_DRAW ? new Paint() : null;
if (DEBUG_DRAW_PAINT != null) {
DEBUG_DRAW_PAINT.setAntiAlias(true);
DEBUG_DRAW_PAINT.setColor(Color.MAGENTA);
}
}
谁和如何使用它?是否有可能以某种方式切换此标志并获取AOSP类的调试输出?
答案 0 :(得分:0)
Java和Reflection
可以实现一切优点:
缺点:
这项技术将在运行时执行,因此在此之前执行的任何代码(例如类加载)......好吧,已经执行了。所以你不会看到效果
在运行时缓慢
<强>危险即可。小心使用
您可以使用以下方法修改任何值:
Class<?> klass = ...
Field field = klass.getDeclaredField("DEBUG_DRAW");
field.setAccesible(true);
field.set(
null, // as this is an static attribute we don't need anything here...
true // set true as new value
);
正如我之前所说,反射是一种危险的技术,因此如果使用错误,snipped会抛出几个异常,因此你必须处理它们