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 了解更多此类规则。
我正在为我的 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 了解更多此类规则。