如何在AOSP类中使用DEBUG标志?

时间:2017-06-28 12:19:26

标签: android android-source

有时在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类的调试输出?

1 个答案:

答案 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会抛出几个异常,因此你必须处理它们