【问题标题】:Xposed can't hook getInstalledApplicationsXposed 无法挂钩 getInstalledApplications
【发布时间】:2021-03-08 02:47:03
【问题描述】:

我想挂钩 getInstalledApplications 和 getInstalledPackages 以监控应用程序是否使用此方法获取我的应用程序列表。
我的代码:

XposedHelpers.findAndHookMethod(

                    android.content.pm.PackageManager.class.getName(),
                    lpparam.classLoader,
                    "getInstalledApplications",
                    new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            XposedBridge.log("getInstalledApplications()");
                            Log.d("HookLogin", "getInstalledApplications()");
                        }
                    });

我得到了这个错误:Xposed: java.lang.NoSuchMethodError: android.content.pm.PackageManager#getInstalledApplications()#exact 然后我用谷歌搜索,发现我应该使用android.app.ApplicationPackageManager,然后我更改了我的代码:

     XposedHelpers.findAndHookMethod(

                    "android.app.ApplicationPackageManager",
                    lpparam.classLoader,
                    "getInstalledPackages",
                    new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            XposedBridge.log("getInstalledPackages()");
                            Log.d("HookLogin", "getInstalledPackages()");
                        }
                    });

但我还是遇到了 NoSuchMethodError,这次是:

Xposed: java.lang.NoSuchMethodError: android.app.ApplicationPackageManager#getInstalledApplications()#exact

我现在一头雾水,怎么钩getInstalledPackages这个方法。

【问题讨论】:

    标签: android xposed


    【解决方案1】:

    两个代码版本都有一个主要问题:

    你的钩子不起作用,因为你试图钩子一个不存在的方法:你试图钩子方法getInstalledApplications()但该方法不存在,只有方法[getInstalledApplications(int)][1]确实存在并且可以被钩子.

    您已经注意到android.content.pm.PackageManager 是一个抽象类,而getInstalledApplications(int) 方法也是抽象的。由于 Xposed 无法挂钩 abstract Methods and Interfaces,因此您必须指定实际实现方法 getInstalledApplications(int) 的类。

    PackageManager 的实际实现位于android.app.ApplicationPackageManager 类中,正如您已经发现的那样。

    因此正确的挂钩代码是:

    XposedHelpers.findAndHookMethod(
        "android.app.ApplicationPackageManager",
        lpparam.classLoader,
        "getInstalledPackages", 
        int.class, // this line has been added as the getInstalledPackages method has one int parameter
        new XC_MethodHook() {
        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
            XposedBridge.log("getInstalledPackages()");
                Log.d("HookLogin", "getInstalledPackages()");
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多