在Android中,如何使用Javareflection调用sun.misc.Unsafe方法?

虽然有类似的问题(如A , B和C ),但他们的答案并没有解决我的问题。

我使用Android Studio 1.5.1定位Android API 18(在Android KitKat 4.4之前,所以我正在处理Dalvik,而不是ART运行时)。

我的问题是:

(1)当我使用下面的代码时,我可以打印Android中可用的所有sun.misc.Unsafe方法的列表,所以我想我可以使用reflection访问它们,但我不知道如何使用reflection调用它们。

(2)如果(1)是可能的,如何在Android中通过reflection使用sun.misc.Unsafe方法找到magicNumber(在下面的代码中)地址?

(3)如果(1)是可能的但是(2)是不可能的,如何在任何本地存储器地址中放入一个整数(比如int test = 123)并使用Android中的sun.misc.Unsafe方法打印其存储器地址reflection?

String ClassName = "sun.misc.Unsafe"; int magicNumber = 0x23420023 ; try { Class classToInvestigate = Class.forName(ClassName); Constructor[] aClassConstructors = classToInvestigate.getDeclaredConstructors(); for(Constructor c : aClassConstructors){ System.out.println("********************* constructor="+c); } Method[] aClassMethods = classToInvestigate.getDeclaredMethods(); for(Method m : aClassMethods){ System.out.println("********************* method="+m); } Field theUnsafe = classToInvestigate.getDeclaredField("THE_ONE"); theUnsafe.setAccessible(true); Object unsafe = theUnsafe.get(null); } catch (ClassNotFoundException e) { // Class not found! } catch (Exception e) { // Unknown exception } 

不幸的是, sun.misc.Unsafe类不包含在android标准库中,你应该在reflection之间使用它,但我发现了另一个解决方案:在我的库中预编译的直接代理类之间使用它: https : //github.com/iamironz/不安全

这个类将在几乎所有现有的JVM实现上返回一个Unsafe实例,包括Android(两个VM版本): https : //github.com/noctarius/tengi/blob/master/java/tengi-core/src/main/java/ COM / noctarius / tengi /核心/ IMPL / UnsafeUtil.java