Android: java.lang.VerifyError: отклонение класса на устройствах Lollipop

У меня проблема с запуском моего приложения для Android на устройствах Lollipop 5.0.

Когда я создаю apk-релиз, он отлично работает на всех протестированных мною устройствах (Android 6,7 и 4). Несколько недель назад он также работал на моем устройстве 5.0, и я не помню, чтобы он изменил что-то существенное. Это LG G3.

Ошибка, которую я получаю:

E/AndroidRuntime: FATAL EXCEPTION: main
                                             Process: com.duke.privatpc.quiztest, PID: 2758
                                             java.lang.VerifyError: Rejecting class com.duke.privatpc.quiztest.Splash because it failed compile-time verification (declaration of 'com.duke.privatpc.quiztest.Splash' appears in /data/app/com.duke.privatpc.quiztest-2/base.apk)
                                                 at java.lang.reflect.Constructor.newInstance(Native Method)
                                                 at java.lang.Class.newInstance(Class.java:1572)
                                                 at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
                                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2206)
                                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365)
                                                 at android.app.ActivityThread.access$800(ActivityThread.java:148)
                                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)
                                                 at android.os.Handler.dispatchMessage(Handler.java:102)
                                                 at android.os.Looper.loop(Looper.java:135)
                                                 at android.app.ActivityThread.main(ActivityThread.java:5272)
                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                 at java.lang.reflect.Method.invoke(Method.java:372)
                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909)
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
04-02 12:09:20.038 1014-2108/? I/art: Explicit concurrent mark sweep GC freed 26780(1315KB) AllocSpace objects, 1(16KB) LOS objects, 30% free, 73MB/105MB, paused 1.223ms total 163.987ms

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

Мой Грейдл:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.duke.privatpc.quiztest"
    minSdkVersion 16
    targetSdkVersion 23
    versionCode 5
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':BaseGameUtils')
    compile 'com.anjlab.android.iab.v3:library:1.0.+'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.google.firebase:firebase-ads:10.2.0'
    testCompile 'junit:junit:4.12'
}


apply plugin: 'com.google.gms.google-services'

Сама активность составляет около 22 000 строк, так как я создаю множество объектов. В основном это один метод создания 2000 вопросов для викторины. Я знаю, что это не красивый код и не лучший способ сделать это, поскольку я мог бы использовать базу данных, но я нахожусь на том этапе, когда я действительно не хочу переписывать большую часть приложения. В основном я хочу знать, может ли это быть вызвано слишком большим методом и есть ли способ его оптимизировать?


person Dustin Keßler    schedule 02.04.2017    source источник
comment
Если вам действительно нужно выполнить тяжелую инициализацию, я надеюсь, что вы делаете это в асинхронной задаче, а не в основном потоке пользовательского интерфейса за заставкой. Вы должны начать задачу, когда появится экран, и как только задача завершится, вы сможете перейти к следующему экрану при успешном обратном вызове? Имеет ли это смысл?   -  person Hassan    schedule 02.04.2017
comment
Если это решит вашу проблему, дайте мне знать, и я могу написать подробный ответ, если нет, обновите свой вопрос, указав код вашей активности.   -  person Hassan    schedule 02.04.2017
comment
да, это имеет смысл, я попробую это! Но как эта проблема связана с устройством Lollipop, поскольку оно работает на любой другой версии Android? Редактировать: я пытался просто закомментировать длинный метод, но приложение все равно вылетает?   -  person Dustin Keßler    schedule 02.04.2017
comment
На самом деле причин может быть несколько. По сути, это неспособность проверить согласованность и безопасность вашего класса. Это может быть результатом обновления некоторых служб Android, например, что привело к ужесточению правил и тому, что телефон теперь работает по-другому. Также может помочь просмотр журнала до и после этого исключения. Вышеупомянутое простое эмпирическое правило, о котором я упоминал, хотя вы можете в конечном итоге переписать часть своего кода, чтобы сделать его проще, чтобы его можно было быстро/легко проверить.   -  person Hassan    schedule 02.04.2017
comment
Само общее исключение находится по адресу docs.oracle.com/. javase/7/docs/api/java/lang/VerifyError.html Указывает, что: Генерируется, когда верификатор обнаруживает, что файл класса, хотя и правильно сформированный, содержит какое-то внутреннее несоответствие или проблему безопасности.   -  person Hassan    schedule 02.04.2017
comment
Другие потоки SO, которые вы, возможно, уже посетили: он не прошел проверку времени компиляции -verification" title="отклонение класса, поскольку он не прошел проверку времени компиляции"> stackoverflow.com/questions/33551848/   -  person Hassan    schedule 02.04.2017
comment
да, я пробовал все советы, представленные в этих темах, но ничего не работало   -  person Dustin Keßler    schedule 02.04.2017
comment
Вы смогли это решить? В чем была проблема, которую вы, наконец, узнали?   -  person Hassan    schedule 04.04.2017
comment
хорошо, я сделал, но не с помощью асинхронной задачи. Я просто разделил методы на несколько более мелких, и это сработало :) Все равно спасибо за помощь!   -  person Dustin Keßler    schedule 06.04.2017