我将Firestore用于我的Android项目,并使用以下代码将提取的文档转换为自定义数据类
val userData = user.toObject(UserData::class.java)!!
现在,当没有发生代码混淆时,这一行可以完美地工作,但是,通过混淆,这一行将不会失败,而是不会将user
文档数据复制到userData
。所以我认为问题可能在于Firestore和代码混淆。
其他人以前有过这个问题吗?
toObject()
方法使用反射从用户文档中填充UserData
模型。现在UserData
类变得模糊了,Firestore无法将文档中的值映射到模型类。
要解决此问题,您需要对Firebase中使用的所有数据模型禁用代码模糊处理。
最简单的修复方法是将@Keep
注释添加到数据类中。
@Keep
data class UserData(...)
如果您有很多这样的模型,您可以通过向proguard-rules.pro
添加更多规则来禁用整个文件或包的obuscitation。
例如,当代码收缩和模糊时,此语句将保持model
包中所有类的完整性:
-keep class com.example.app.data.models.** { *; }
查看文档了解更多此类规则。