在 gradle 中启用 Proguard 后 FCM 不起作用
Posted
技术标签:
【中文标题】在 gradle 中启用 Proguard 后 FCM 不起作用【英文标题】:FCM doesn't work after enabling Proguard in gradle 【发布时间】:2019-11-08 00:13:27 【问题描述】:我之前连接了FCM
并进行了测试。而且效果很好。
但是,我已准备好发布我的应用并在build.gradle
中启用了proguard
buildTypes
release
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt')
proguardFile 'proguard-rules.pro'
debug
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt')
proguardFile 'proguard-rules.pro'
// proguardFile 'proguard_debug.pro'
并将其应用到proguard-rules.pro
:
-keep class com.firebase.** *;
-keepnames class com.fasterxml.jackson.** *;
-keepnames class javax.servlet.** *;
-keepnames class org.ietf.jgss.** *;
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
-dontwarn com.firebase.**
-dontnote com.firebase.client.core.GaePlatform
每个人都收到推送消息,但只有我的测试手机没有收到它们,这是 proguard
启用的。我将data
模型转换为Serialize
格式。但是现在这个问题正在发生。
如何使用 FCM 或其他 Firebase 功能,例如 Remote Config
或 Crashlystics
?
【问题讨论】:
data
模型是 Kotlin data
类?
它是data class
,但将其更改为class MyClass: Serializable
,然后为每个变量提供@SerializedName('variable_name')
,并解决了序列化问题。但这是另一个问题。我现在遇到FCM
的问题。
【参考方案1】:
混淆重命名 Kotlin data class
中的变量而没有 @SerializedName
并且结果 Json
不解析为模型类。
为了防止这种情况,您可以使用@Keep
注释
@Keep
data class MyClass(...)
或将@SerializedName
设置为所有值
【讨论】:
谢谢。但是..你对FCM
有什么想法吗?
@c-an 您可以将-dontnote com.google.**
添加到proguard-rules.pro
但我没有使用Firebase
的任何特定配置
我需要实现Serializable
吗?以上是关于在 gradle 中启用 Proguard 后 FCM 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在启用 Proguard 的情况下将 Play 服务从 8.1 更新到 8.3
Android Build 使用 Proguard 和 Gradle 失败