FCM 15.0.2无法使用Dexguard在发布版本中生成令牌

时间:2018-05-14 01:23:42

标签: android firebase firebase-cloud-messaging dexguard

我将FCM与Dexguard配合使用。 FCM无法在发布版本中生成令牌。 但是,它在调试版本中运行良好。

我的gradle设置

classpath 'com.google.gms:google-services:3.2.1'
compile 'com.google.android.gms:play-services-base:15.0.2'
compile 'com.google.android.gms:play-services-analytics:15.0.2'
compile 'com.google.firebase:firebase-core:15.0.2'
compile 'com.google.firebase:firebase-messaging:15.0.2'

而且,ShrinkResources = false并通过Dexguard优化5次

gradle version : 4.1 android gradle plugin : 2.3.3

与FCM相关的dexguardFile中的

选项

-keep public class com.google.firebase.** { *; }
-keep public class com.google.firebase.iid.FirebaseInstanceId { public *;}

3 个答案:

答案 0 :(得分:0)

添加以下dexguard规则来解决该问题:

-keep class com.google.firebase** { *; }
-dontshrink

似乎dexguard删除了所有未在代码中直接引用的类。因此,如果允许收缩,则在混淆过程中将删除获取Firebase令牌(FirebaseInstanceIdService)的服务类之类的入口点。

答案 1 :(得分:0)

Firebase 15+需要一些其他规则。例如,最新的DexGuard版本8.2.09包含所有必需的配置。

答案 2 :(得分:0)

由于T. Neidhart的answer,我在Firebase Analytics中遇到了类似的问题,它只能用于调试版本,而不能用于发行版本,因此我从Dexguard 8.4.13示例- samples / advanced / GooglePlayServices / AdMob / dexguard-project.txt ,它为我解决了这个问题。

-keep public class !**.internal.**, com.google.** {
    public protected *;
}
# We can repackage all obfuscated classes in a new internal package.
-repackageclasses com.google.internal