android - Xposed - 我可以打印内部类方法,但方法挂钩不起作用
问题描述
我试图在内部类中挂钩一个方法,但什么也没发生,而我可以打印该类的所有方法。
打印的所有日志,除了replaceHookedMethod
.
public class Keyguard implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (!lpparam.packageName.equals("com.android.keyguard"))
return;
XposedBridge.log("we are in keyguard!");
Class HwClockView = XposedHelpers.findClass("com.android.keyguard.AbsClockView$HwClockView",
lpparam.classLoader);
for (Method m : HwClockView.getDeclaredMethods()) {
XposedBridge.log("method: " + m.getName());
}
XposedHelpers.findAndHookMethod(HwClockView, "getDateString",
TimeZone.class, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("we are in getDateString!");
return String.format("%s", Utils.getPersianDateShort());
}
});
}
更新: 在第二条评论之后将代码更改为此,但与之前一样没有任何反应:
public class Keyguard implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
if (!lpparam.packageName.equals("com.android.keyguard"))
return;
XposedBridge.log("we are in keyguard!");
Class HwClockView = XposedHelpers.findClass("com.android.keyguard.AbsClockView$HwClockView",
lpparam.classLoader);
for (Method m : HwClockView.getDeclaredMethods()) {
XposedBridge.log("method: " + m.getName());
if ("getDateString".equalsIgnoreCase(m.getName())) {
XposedBridge.hookMethod(m, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam param) {
XposedBridge.log("we are in getDateString!");
return String.format("%s", Utils.getPersianDateShort());
}
});
}
}
}
目标类:
public class AbsClockView extends RelativeLayout {
protected Calendar mCalendar;
private HwCustKeyguardStatusViewEx mCustKeyguardStatusViewEx;
protected TextView mDateView;
protected TextView mDescriptionView;
protected Factory mFactory;
protected final AtomicBoolean mFixedTimeZone;
protected FrameLayout mTimeParent;
protected TextView mTimeView;
public interface Factory {
void refreshDate();
void setHwDateFormat();
void updateHwTimeStyle();
}
private class HwClockView implements Factory {
protected Context mContext;
public HwClockView(Context context) {
...
}
private CharSequence getDateString(TimeZone timeZone) {
return someString;
}
}
public AbsClockView(Context context) {
this(context, null);
}
}
解决方案
推荐阅读
- arrays - 如何在for循环中设置数组总元素
- java - 如何使用 servlet 过滤器拦截对其他应用程序的请求?
- reactjs - 未捕获的 TypeError: (0 , _reactTable.useTable) 不是函数
- javascript - 返回数组中的对象属性
- ruby-on-rails - How to fix ActionController::UnknownFormat error for json rendered reponse in RSpec
- azure-data-factory - 如何在 REST 数据集到 SQL 数据集的映射中使用动态日期
- parse-platform - 如何限制对客户端可见的解析配置参数?
- pentaho - 如何映射来自 2 个输入的字段以生成 1 个输出
- python - 无法设置 QTableView 的行高
- python - 在 Django 中设计正确的模式关系