Код findAndHookMethod в java Xposed неверен. Помогите!! (NoSuchMethodError) - PullRequest
0 голосов
/ 27 мая 2020

Цель перехвата: ButtonClickCount (int a)

Если код ниже

public int ButtonClickCount()
{
    return 1;
}

Успех с кодом перехвата ниже.

    findAndHookMethod(
            "com.study.MainActivity",
            lpparam.classLoader,
            "ButtonClickCount",

            new XC_MethodHook() {
                @Override
                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                    super.beforeHookedMethod(param);
                    XposedBridge.log("before");
                }

                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    XposedBridge.log("after");
                    param.setResult(10000);
                }
            }

    );
}

Но, если Метод ButtonClickCount получает значение аргумента, возникает ошибка NoSuchMethodError.

public int ButtonClickCount(int a)
{
    return a++;
}

Это ошибка в findAndHookMethod, и я не знаю, что добавить в код.

1 Ответ

0 голосов
/ 27 мая 2020

я решил.

пример кода 1

public int ButtonClickCount() {
    return 1;
}

.

    findAndHookMethod(
            "com.study.MainActivity",
            lpparam.classLoader,
            "ButtonClickCount",
            new XC_MethodHook() 

.

пример кода 2

public int ButtonClickCount(int a) {
    return a++;
}

.

    findAndHookMethod(
            "com.study.MainActivity",
            lpparam.classLoader,
            "ButtonClickCount",
            int.class,
            new XC_MethodHook() 

пример кода 3

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView((int) R.layout.activity_main);
    this.btn = (Button) findViewById(R.id.btn);
    this.up = (TextView) findViewById(R.id.up);
    this.btn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

.

    findAndHookMethod(
            "com.study.MainActivity",
            lpparam.classLoader,
            "ButtonClickCount",
            Bundle.class,
            new XC_MethodHook() 

Как видно из приведенного выше примера кода, если вы подключаете метод, который не принимает значение аргумента, вы можете просто указать имя класса, загрузчик классов, имя метода, объект.

Однако, если вы получаете значение аргумента int a, называемое int a, от метода для перехвата, как в примере кода 2, вы должны добавить int.class в findAndHookMethod. Если вы не добавите его, вы увидите NoSuchMethodError в приложении Xposed.

Если вы попытаетесь подключить метод onCreate, как в примере кода 3, метод onCreate принимает аргумент типа Bundle. Итак, вам нужно добавить Bundle.class в findAndHookMethod.

Этот DO C помог мне с разрешением. https://api.xposed.info/reference/de/robv/android/xposed/XposedHelpers.html#findAndHookMethod (java .lang.String,% 20 java .lang.ClassLoader,% 20 java .lang.String,% 20 java .lang.Object ...)

Если это не сработает, проверьте версию Android Studio. В моем случае я перешел с версии 3.6.2 на версию 2.3.2, а затем запустил ее.

Надеюсь, мое решение кому-то поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...