如果在Android平台上使用它,在Java库中检测的好方法是什么?
答案 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;
}
}