用于检测是否在Android上使用Java库的干净方法

时间:2011-02-27 20:58:16

标签: java android

如果在Android平台上使用它,在Java库中检测的好方法是什么?

3 个答案:

答案 0 :(得分:2)

我会说根据定义,这不是很干净。为什么你认为你需要这个功能?

但最简单的方法是尝试从ClassLoader动态加载Android类(你显然无法导入它,因为它只能在针对Android编译时才有效)。

ClassLoader.getSystemClassLoader().loadClass("android.app.Activity");

答案 1 :(得分:0)

另一种检测方法是检查system properties。例如:

  if (System.getProperty("java.vm.name").equals("Davlik")) {
      System.out.println("Android rules!");
  }

与“动态加载Android类”方法一样,沙箱安全性可能会阻止对系统属性的访问。

答案 2 :(得分:0)

我注意到当前堆栈的结构跟踪在Android和普通JRE之间是不同的。在Android(Dalvik和ART)上,堆栈跟踪始终由dalvik.system.VMStack预先设置。所以,你可以使用这个:

public static boolean isAndroid() {
    StackTraceElement[] stack = Thread.currentThread().getStackTrace();
    if (stack[0].getClassName().equals("java.lang.Thread")) {
        return false;
    } else {
        return true;
    }
}