簡體   English   中英

Xposed 無法掛鈎 getInstalledApplications

[英]Xposed can't hook getInstalledApplications

我想掛鈎 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()");
                        }
                    });

And I got this error: Xposed: java.lang.NoSuchMethodError: android.content.pm.PackageManager#getInstalledApplications()#exact Then I googled and found I should use android.app.ApplicationPackageManager ,and I changed my code:

     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

兩種代碼版本都有一個主要問題:

您的掛鈎無法工作,因為您試圖掛鈎一個不存在的方法:您正在嘗試掛鈎方法getInstalledApplications()但該方法不存在,只有方法[getInstalledApplications(int)][1]確實存在並且可以上鈎。

您已經注意到android.content.pm.PackageManager是一個抽象 class 方法getInstalledApplications(int)也是抽象的。 由於 Xposed 不能掛鈎抽象方法和接口,您必須指定實際實現方法getInstalledApplications(int)的 class 。

PackageManager 的實際實現位於 class 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()");
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM