- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个像这样定义的枚举类(改编自 java documentation )
package com.example.planetExample;
public enum Planet {
MERCURY (3.303e+23, 2.4397e6){
public double surfaceGravity() {
return 42;
}
},
VENUS (4.869e+24, 6.0518e6);
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
// universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11;
double surfaceGravity() {
return G * mass / (radius * radius);
}
}
现在,我想使用 XPosed Hook 已被 MERCURY 覆盖的 surfaceGravity
函数(并且不是下面定义的通用函数)。我怎样才能访问该功能?
我尝试了findAndHookMethod("com.example.planetExample.Planet", lpparam.classLoader, "surfaceGravity", [etc])
,但是那个只 Hook 了Planet类定义的一般surfaceGravity ,而不是 MERCURY 定义的。如果我尝试 com.example.planetExample.Planet$MERCURY
或 com.example.planetExample.Planet.MERCURY
,我会从 XPosed 收到错误,该函数 找不到 SurfaceGravity
。
有没有办法使用 XPosed 来 Hook 这个函数?
最佳答案
MERCURY 是 Planet Enum 的一个字段。由于它有自己的实现,因此将在编译时为其生成一个类,不幸的是,它的名称与字段的名称不匹配(例如,在您的情况下,它可能是 com.test.Planet$1)。
考虑以下示例:
public static void main(String[] args) {
System.out.println("Mercury radius: " + Planet.MERCURY.surfaceGravity()); // 42
System.out.println("Planet class: " + Planet.class.getName()); //prints "com.test.Planet"
try {
Class<?> planet_cls = Class.forName("com.test.Planet");
System.out.println(Planet.class); // com.test.Planet
System.out.println(Planet.MERCURY.getClass()); // com.test.Planet$1
System.out.println(Planet.VENUS.getClass()); // com.test.Planet
for(Class c: Planet.class.getDeclaredClasses())
System.out.println("Name:" + c.getName()); // wont print
for(Field c: Planet.class.getDeclaredFields())
System.out.println("Field Name:" + c.getName()); // MERCURY & VENUS :)
try {
Field mercury_field = planet_cls.getDeclaredField("MERCURY");
Object o = mercury_field.get(null);
System.out.println("Field class name: " + o.getClass()); // com.test.Planet$1
try {
Method surfaceGravity = o.getClass().getDeclaredMethod("surfaceGravity");
System.out.println("Confirm result: " + surfaceGravity.invoke(o)); // 42!
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
因此,通过按名称检索字段,您可以获取其类和方法。请注意,在 Xposed 中,您将有另一个 Hook api 来接收该方法,而不是通过名称查找它,只需将示例中的方法传递给它即可。
该代码的输出可以节省您一些时间:
Mercury radius: 42.0
Planet class: com.test.Planet
class com.test.Planet
class com.test.Planet$1
class com.test.Planet
Field Name:MERCURY
Field Name:VENUS
Field Name:mass
Field Name:radius
Field Name:G
Field Name:$VALUES
Field class name: class com.test.Planet$1
Confirm result: 42.0
关于java - XPosed: Hook 枚举中覆盖的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42111066/
如标题所述,我想使用 xposed 记录应用程序中调用的所有方法,从它开始直到我停止它。我只想记录类名、方法名,不想 Hook 所有方法。我尝试此代码,但收到错误 getMethod not foun
我正在尝试 Hook 一个方法: findAndHookMethod("com.android.keyguard.KeyguardPatternView.UnlockPatternListener"
我正在尝试为电报应用程序开发我自己的 Xposed 模块,但是当我尝试 Hook 名为“setOnClickListener”的方法时,Xposed 显示以下错误: de.robv.android.x
我正在构建一个 xposed 模块,我只想在某个进程(应用程序)调用此方法时才 Hook 该方法。我可以使用 Binder 获取进程 pid 和 uid,但是我找不到没有上下文的方法来获取包名称(我在
我正在研究 XPosedModule,但我需要帮助: 我 hook 了一个方法,它有一些局部变量(只能在这个方法中访问),但我需要访问这些变量。我试过了 XposedHelpers.getObject
我尝试 Hook 所有应用程序,如何获取应用程序的上下文。 我试过了 try { Class ContextClass = XposedHelpers.findClass("android.c
假设我有一个像这样定义的枚举类(改编自 java documentation ) package com.example.planetExample; public enum Planet {
在 Xposed 中,我试图调用 AppCustomClass 的方法 getResult对象在 Hook 方法中作为参数传递。 protected void myMethod(XC_LoadPack
我正在开发一个 Xposed 模块,作为 FatMinMin 的扩展 minminHide module这似乎也是一个很好的开发练习:)问题是在启动期间,当我检查 xposed 日志时,我得到以下信息
我希望能够从我的 Xposed 模块发布通知、显示 toasts 和启动/停止服务,为此我需要一个 Context。我的 Xposed 模块有它自己的上下文吗?如果没有,我可以通过挂接到另一个进程来获
我尝试 Hook Settings.System.putInt 方法,它是 static。此方法的调用之一是在 com.android.settings.AirplaneModeEnabler 类的
我正在浏览 Android 中的 Xposed 框架。专门看博客-http://d3adend.org/blog/?p=589对于潜在的对策,并且有几个关于这些问题的问题。 因此,当我们使用 Xpos
如题,我想hook第三个app,可以从第三个app的activity调用我的application activity。所以我想获取第三个app的context,怎么办? 第三个app的包是com.ss
我正在使用 Xposed 做一些方法 Hook (现在,只是为了学习)。我设法 Hook 方法 SendTextMessage (android.telephony.SmsManager),我可以在方
我正在尝试制作一个 Xposed 模块。我首先阅读了一个教程,其中包含操作时钟的说明。代码如下: package de.robv.android.xposed.mods.tutorial; impor
我试图在我新获得 root 权限的 Xposed 智能手机上安装 Snapchat。但是登录是不可能的,因为 Snapchat 检测到 Xposed Framework。我“理解”此限制的原因,尽管我
我正在为 Xposed 创建一个模块,它做我想做的,但我想为用户提供一个简单的首选项屏幕来输入两个整数值。 我主要用的是能找到的教程here on XDA . 教程说明必须创建一个 Activity
如何在 BroadcastReceiver 中挂接 onReceive 方法? public class RecentsActivity extends Activity { mIntentRec
我是 Android 编程的新手,并开始了我的第一个项目作为 Xposed 模块,这个 xposed 模块有一个选项,当它被启用时它会改变一个可绘制文件,现在好吗?我遇到的问题是在 public vo
我正在尝试在 Android 上使用 Xposed 来连接到 Android 资源,特别是 Webview 的 loadUrl。下面的代码 Hook 到 loadUrl,如果成功,将在日志中打印一条消
我是一名优秀的程序员,十分优秀!