VerifyError:验证者使用Gradle插件3.2.0 + Proguard拒绝了日志com.google.firebase.FirebaseApp类

时间:2018-10-01 12:02:32

标签: android firebase crash android-proguard verifyerror

在我们的项目中,我们一直在成功使用:

  • 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分配PC: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的类型为未初始化参考:com.google.firebase.internal.a分配PC:58,但预期参考:com.google.firebase.FirebaseApp $一种        com.google.firebase.FirebaseApp com.google.firebase.FirebaseApp.a(android.content.Context,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分配PC: 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 :(得分:5)

proguard -assumenosideeffectsLog好像有问题。

仅在您使用的方法上以及依赖于这些-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 {*;}

希望这会有所帮助。