我将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
选项
-keep public class com.google.firebase.** { *; }
-keep public class com.google.firebase.iid.FirebaseInstanceId { public *;}
答案 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