首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xposed -如何挂接私有静态方法

Xposed -如何挂接私有静态方法
EN

Stack Overflow用户
提问于 2015-03-10 00:54:50
回答 2查看 6.2K关注 0票数 2

提出的问题:

我想修改android.os.Build中的一些静态字段,比如android.os.Build.BOARD,android.os.Build.DEVICE,android.os.Build.DISPLAY。

Build.java中有3个私有的静态方法(私有静态字符串getString(String属性),私有静态String[] getStringList(String属性,字符串分隔符),私有静态长getLong(String属性))。

然后我尝试在android.os.Build中挂接静态方法'getString(String s)‘。

代码语言:javascript
复制
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {

    XposedBridge.log(loadPackageParam.packageName + " -> load ");

    Class build = XposedHelpers.findClass(Build.class.getName(), loadPackageParam.classLoader);

    XposedHelpers.findAndHookMethod(build, "getString", String.class, new XC_MethodHook() {
        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
            XposedBridge.log("before ->" + param.args[0]);
            super.beforeHookedMethod(param);
        }

        @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
            XposedBridge.log("after ->" + param.args[0]);
            super.afterHookedMethod(param);
        }
    });}

当我调用android.os.Build.Model时,我尝试打印之前/之后方法中的第一个输入参数。但我错了,它还没有被触发。

如何在android.os.Build.java中挂接此私有静态方法

代码语言:javascript
复制
private static String getString(String property) {
    return SystemProperties.get(property, UNKNOWN);}
EN

回答 2

Stack Overflow用户

发布于 2015-03-24 10:04:02

代码语言:javascript
复制
public void initZygote(StartupParam startupParam) throws Throwable {  

    Class clazz = XposedHelpers.findClass(android.os.Build.class.getName(), null);

    Method m = XposedHelpers.findMethodExact(clazz, "getString", String.class);

    m.setAccessible(true);

    XposedBridge.hookMethod(m, new XC_MethodHook() {
        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
            log("call -> " + (String) param.args[0]);
            super.beforeHookedMethod(param);
        }
    });

    String id = (String) m.invoke(null, "ro.build.id");
    log("step 1 try invoke->" + id);
    log("step 2 Call Build.ID ->" + Build.ID);
}

步骤1可以引发beforeHookedMethod,但步骤2不能。

票数 0
EN

Stack Overflow用户

发布于 2015-05-09 01:11:09

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28947591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档