VerifyError:Verifier 拒绝了使用 Gradle Plugin 3.2.0 + Proguard 去除



在我们的项目中,我们成功地使用了:

  • 火力基地(用于FCM(
  • 崩溃
  • 分析(用于报告崩溃(
  • Proguard(优化版(

一切都很顺利,直到上周我们升级到gradle plugin 3.2.0

在此版本中,如果我们具有以下 proguard 配置来删除对 Log 的调用:

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

运行应用程序时,我们得到:

java.lang.VerifyError: Verifier reject class 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.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$a 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( 中一样。

有没有人知道可能导致这种情况的原因?

> 似乎 proguard-assumenosideeffectsLog存在一些问题。

尝试仅在您使用的方法以及依赖于这些Log方法的任何方法上使用-assumenosideffects

像这样:

-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 {*;}

希望这有帮助。

最新更新