VerifyError: Verifier отклонил класс com.google.firebase.FirebaseApp, используя Gradle Plugin 3.2.0 + Proguard для удаления логов - PullRequest
0 голосов
/ 01 октября 2018

В нашем проекте мы успешно используем:

  • Firebase (для FCM)
  • Crashlytics (для сообщения о сбоях)
  • Proguard (оптимизированная версия)

Все было хорошо до прошлой недели, когда мы обновились до gradle plugin 3.2.0.

В этой версии, если у нас есть следующая конфигурация proguard для удаления звонков в Log:

-assumenosideeffects class android.util.Log { *; }

при запуске приложения мы получаем:

java.lang.VerifyError: верификатор отклонил класс com.google.firebase.FirebaseApp: void com.google.firebase.FirebaseApp. () не удалось проверить: void com.google.firebase.FirebaseApp. (): [0x37] регистр v0 имеет тип Неинициализированная ссылка: java.lang.Object Распределение ПК: 53, но ожидается Ссылка: java.lang.Object void com.google.firebase.FirebaseApp. (android.content.Context, java.lang.String, com.google.firebase.b) не удалось проверить: void com.google.firebase.FirebaseApp. (android.content.Context, java.lang.String, com.google.firebase.b): [0x3C] регистр v8 имеет тип UniСсылка: com.google.firebase.internal.a Распределительный ПК: 58, но ожидаемый Ссылка: com.google.firebase.FirebaseApp $ a.g.g.f.fbb.Amp.Контекст, com.google.firebase.b, java.lang.String) не удалось проверить: com.google.firebase.FirebaseApp com.google.firebase.FirebaseApp.a (android.content.Context, com.google.firebase.b, java.lang.String): [0x17] регистр v1 имеет тип Неинициализированная ссылка: com.google.firebase.FirebaseApp $ 1 Распределительный ПК: 21, но ожидается Ссылка: com.google.android.gms.common.api.internal.a $a (объявление 'com.google.firebase.FirebaseApp' появляется в /data/app/com.example.app-2/base.apk)`

Если мы удалим эту конфигурацию, чтобы удалитьзвонки на Log все в порядке, как это было в предыдущей версии плагина gradle (3.1.4).

Кто-нибудь знает, что может быть причиной этого?

1 Ответ

0 голосов
/ 02 октября 2018

Похоже, что есть проблемы с proguard -assumenosideeffects и Log.

Попробуйте использовать -assumenosideffects только для тех методов, которые вы используете, и тех методов, которые зависят от этих Log методов.

Что-то вроде:

-assumenosideeffects class android.util.Log {
    public static *** v(...);
    public static *** d(...);
    public static *** i(...);
    public static *** w(...);
    public static *** e(...);
}

вместо обычного

-assumenosideeffects class android.util.Log {*;}

Надеюсь, это поможет.

...