繁体   English   中英

FCM 15.0.2 无法在使用 Dexguard 的发布版本中制作令牌

[英]FCM 15.0.2 cannot make token in release build with Dexguard

我正在使用 FCM 和 Dexguard。 FCM 无法在发布版本中制作令牌。 但是,它在调试版本中运行良好。

我的毕业设置

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

dexguardFile 中与 FCM 相关的选项

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

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

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

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

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

由于 T. Neidhart 上面的回答,我在 Firebase 分析中遇到了类似的问题,它适用于调试版本,但不适用于发布版本,我从 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM