Dexguard 导致 Firebase 崩溃

Posted

技术标签:

【中文标题】Dexguard 导致 Firebase 崩溃【英文标题】:Firebase crash with Dexguard 【发布时间】:2017-01-16 18:50:06 【问题描述】:

知道为什么会发生这种崩溃吗?调试构建工作,但 Dexguard 版本在尝试登录用户时崩溃(使用 signInWithCustomToken 登录)

更新:以下 proguard 设置修复了问题

-keep class com.google.android.gms.internal.** *;

Firebase 版本:9.4.0

Caused by java.lang.IllegalArgumentException: field o.ս.ʽ has type android.support.v4.util.ArrayMap, got o.dj
       at java.lang.reflect.Field.set(Field.java)
       at com.google.android.gms.internal.zzaog$1.zza(Unknown Source)
       at com.google.android.gms.internal.zzaog$zza.zzb(Unknown Source)
       at com.google.android.gms.internal.zzamp.zza(Unknown Source:46000)
       at com.google.android.gms.internal.zzafy.zze(Unknown Source:8000)
       at com.google.firebase.auth.FirebaseAuth.(Unknown Source)
       at com.google.firebase.auth.FirebaseAuth.(Unknown Source)
       at com.google.android.gms.internal.zzaft.(Unknown Source)
       at com.google.firebase.auth.FirebaseAuth.getCurrentUser(Unknown Source:19000)

Proguard 配置:

# Firebase
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.google.firebase.**  *; 
-keep class org.apache.**  *; 
-keepnames class com.fasterxml.jackson.**  *; 
-keepnames class javax.servlet.**  *; 
-keepnames class org.ietf.jgss.**  *; 
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**
-keepresources string/default_web_client_id
-keepresources string/firebase_database_url
-keepresources string/gcm_defaultSenderId
-keepresources string/google_api_key
-keepresources string/google_app_id
-keepresources string/google_crash_reporting_api_key
-keepresources string/google_storage_bucket
# Supoort
-dontwarn android.support.**
-keep class android.support.v4.**  *; 
-keep interface android.support.v4.**  *; 
-keep class android.support.v7.**  *; 
-keep interface android.support.v7.**  *; 
-keep class android.support.design.**  *; 
-keep interface android.support.design.**  *; 

【问题讨论】:

看起来 android.support 中的一个类正在重命名。尝试添加 -keep class android.* * *; 抱歉,用支持相关的 proguard 规则更新了帖子,这些规则已经到位。 顺便说一句。你可以回答你自己的问题。 【参考方案1】:

按照 ProGuard 设置修复了问题

-keep class com.google.android.gms.internal.**  *; 

【讨论】:

以上是关于Dexguard 导致 Firebase 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Android Firebase valueEventListener 导致应用程序崩溃

dexguard 混淆问题

从 Firebase 存储中删除文件会导致崩溃

DexGuard 和矢量绘图

setValue() 的完成导致 Firebase 崩溃,Swift 3

com.google.firebase.database.DatabaseException 播放控制台错误