AndroidX на Android Studio 3.2 - VerifyError при запуске приложения - PullRequest
0 голосов
/ 26 августа 2018

Миграция моего приложения в библиотеки AndroidX на Android Studio 3.2.При запуске в режиме отладки все работает как положено, но если я сгенерировал подписанный APK, обфусцированный с помощью Proguard - я получаю эту ошибку:

java.lang.VerifyError: Verifier rejected class d.a: androidx.preference.Preference d.a.a(androidx.fragment.app.k, int)
failed to verify: androidx.preference.Preference d.a.a(androidx.fragment.app.k, int): [0x8] ‘this’ argument ‘Reference:
androidx.fragment.app.k’ not instance of ‘Reference: 
androidx.preference.B’ (declaration of ‘d.a’ appears in base.apk)

Я пытался исключить все библиотеки AndroidX:

-dontwarn androidx.**
-keep class androidx.** { *; }
-keep interface androidx.** { *; }

Но проблема не исчезнет, ​​если я не отменю обфускацию с помощью

-keep class com.myapp.package.** { *; }

Также попытался посмотреть файл сопоставления для определения класса d.a, но это не указывало на направление проблемы.

Jetifier включен

android.useAndroidX=true
android.enableJetifier=true

Я что-то здесь упускаю?Есть ли вероятность, что это проблема с библиотекой androix.preference?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Решено.

Добавьте android.enableR8=false к вашему project gradle.properties файлу, и все будет работать как положено.

Обратите внимание, что это не печально известная ошибка d8.R8 - это новый инструмент для сжатия и запутывания кода, который заменяет ProGuard, и он включен по умолчанию на канарейке Android Studio 3.2.

Опция # 2: (Это было предоставлено Google)

Если вы хотите использовать усадку R8, отредактируйте ваш проект build.gradle следующим образом: (обратите внимание, что путь к классу r8 ДОЛЖЕН быть выше пути к классам инструментов сборки)

buildscript {
     repositories {
        jcenter()
        google()

        maven {
            url "http://storage.googleapis.com/r8-releases/raw/master"
        }
    }
    dependencies {
        classpath 'com.android.tools:r8:ff9c89416cc1c8adf83d481a1e5fd515fcb893b9'
        classpath 'com.android.tools.build:gradle:3.3.0-alpha08'
    }
}
0 голосов
/ 27 августа 2018

Несоответствие классов Java между временем компиляции и временем выполнения может привести к java.lang.VerifyError, попробуйте Файл -> Неправильный кеширование / перезапуск ... -> Отменить и перезапустить

...