Kotlin - Firestore toObject 方法未按预期工作

Kotlin - Firestore toObject method not working as intended

我正在为我的 Android 项目使用 Firestore,我正在使用以下代码将获取的文档转换为自定义数据 class

val userData = user.toObject(UserData::class.java)!!

现在,当没有代码混淆发生时,这条线可以完美地工作,但是,有了混淆,这条线不会失败,而是不会将 user 文档数据复制到 userData。所以我认为问题可能出在 Firestore 和代码混淆上。

其他人以前遇到过这个问题吗?

toObject() 方法使用反射从用户文档中填充您的 UserData 模型。现在您的 UserData class 变得模糊不清,Firestore 无法将文档中的值映射到模型 class.

要解决此问题,您需要为您在 Firebase 中使用的所有数据模型禁用代码混淆。

最简单的解决方法是向数据添加 @Keep 注释 class。

@Keep
data class UserData(...)

如果您有很多这样的模型,您可以通过向 proguard-rules.pro 添加更多规则来禁用整个文件或包的混淆。

例如,此语句将保持所有 classes 在 model 包内完好无损,同时代码收缩和混淆:

-keep class com.example.app.data.models.** { *; }

查看 documentation 了解更多此类规则。