在我们的项目中,我们成功地使用了:
- 火力基地(用于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-assumenosideeffects
和Log
存在一些问题。
尝试仅在您使用的方法以及依赖于这些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 {*;}
希望这有帮助。