Это похоже на Отклонение класса, потому что он не прошел проверку во время компиляции Android и java.lang.VerifyError: Verifier отклонил класс на Lollipop при использовании релиза APK , но происхождение моего Проблема до сих пор неизвестна и все предложенные решения не помогают.
Установка вручную подписанного релиза apk с поддержкой MultiDex и включенной ProGuard выдает это исключение при запуске:
475-475/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: ..., PID: 475
java.lang.VerifyError: Verifier rejected class android.support.g.b due to bad method void android.support.g.b.<init>() (declaration of 'android.support.g.b' appears in /data/app/...-2/base.apk)
at ...MyApp.attachBaseContext(Unknown Source)
at android.app.Application.attach(Application.java:181)
Этого не произойдет с -dontoptimize
. Текущий минимальный параметр оптимизации:
-optimizations "code/*"
Я получаю ту же ошибку без -optimizations
или с менее строгими параметрами. Добавление -keep class android.*
тоже не поможет. Я не получаю ошибку с "code/removal/*,code/simplification/*"
, но это игнорирует -assumenosideeffects
android.support.g.b - это запутанный класс android.support.multidex.MultiDex, и ошибка возникает, когда вызывается переопределенный attachBaseContext(Context)
:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
Декодирование этого метода (конструктор по умолчанию) с помощью средства просмотра байтового кода приводит к:
private b() { // <init> //()V
return
}
- Было бы полезно отключить оптимизацию по спецификации класса.
- Альтернатива: знание минимальной опции
-optimizations
, которая учитывает -assumenosideeffects