java.lang.VerifyError в запутанной библиотеке Android - PullRequest
0 голосов
/ 23 сентября 2019

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

Трассировка стека выглядит следующим образом:

Fatal Exception: java.lang.VerifyError: Verifier rejected class com.example.library.-$$Lambda$d$QOXAMJpwehT8fF2Hmjjy5XM7Qx4: void com.example.library.-$$Lambda$d$QOXAMJpwehT8fF2Hmjjy5XM7Qx4.run(): [0xFFFFFFFF] wide register index out of range (15+1 >= 10) (declaration of 'com.example.library.-$$Lambda$d$QOXAMJpwehT8fF2Hmjjy5XM7Qx4' appears in /data/app/com.example.myapp-1/base.apk)
   at com.example.library.MyLibrary.initialize + 317(MyLibrary.java:317)
   at com.example.myapp.MyApp.onCreate + 152(MyApp.java:152)
   at android.app.Instrumentation.callApplicationOnCreate + 1024(Instrumentation.java:1024)
   at android.app.ActivityThread.handleBindApplication + 5581(ActivityThread.java:5581)
   at de.robv.android.xposed.XposedBridge.invokeOriginalMethodNative(XposedBridge.java)
   at de.robv.android.xposed.XposedBridge.handleHookedMethod + 360(XposedBridge.java:360)
   at android.app.ActivityThread.handleBindApplication(ActivityThread.java)
   at android.app.ActivityThread.-wrap2(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage + 1579(ActivityThread.java:1579)
   at android.os.Handler.dispatchMessage + 102(Handler.java:102)
   at android.os.Looper.loop + 154(Looper.java:154)
   at android.app.ActivityThread.main + 6300(ActivityThread.java:6300)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run + 887(ZygoteInit.java:887)
   at com.android.internal.os.ZygoteInit.main + 777(ZygoteInit.java:777)
   at de.robv.android.xposed.XposedBridge.main + 107(XposedBridge.java:107)

Код MyLibrary.java: 317 выглядит следующим образом:

executeOnBackground(() -> {
    // some code
}

Где функция определяется следующим образом:

private static void executeOnBackground(Runnable runnable) {
    executeOnBackground(true, runnable);
}

Что внутренне вызывает это:

private static void executeOnBackground(boolean forcePost, Runnable runnable) {
    if (runnable == null)
        return;

    if (isOnMainThread() || forcePost)
        getNextBackgroundHandler().post(runnable);
    else
        runnable.run();
}

Обратите внимание, что трассировка стека заканчивается до того, как она достигает функций, поэтому я предполагаю, что проблема в лямбда-функциях?Или в определении?Я понятия не имею, как решить эту проблему, но это самая частая ошибка, которую мы получаем прямо сейчас.Это происходит на случайных устройствах и версия ОС Android не имеет значения.Так что, если кто-то может помочь или дать отзыв, я буду признателен.Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2019

Анализ трассировки стека показывает, что XPposed, по-видимому, активен, что является структурой перехвата.Если вы сталкиваетесь с этой ошибкой только на некоторых устройствах, это может быть связано с тем, что некоторые из ваших пользователей пытаются подключить ваше приложение и изменить код в соответствующем классе MyLibrary.

...