如果应用程序是调试版本或发布版本,Firebase会写入不同的文件

如果应用程序是调试版本或发布版本,Firebase会写入不同的文件,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我刚刚发现Firebase有点奇怪,我想知道是我做错了什么,还是有办法解决这个问题 基本上,这就是我开发应用程序时它一直在写的内容(这正是我所期望的): nscoachtools@gmail¸com 最大匹配数:60 最大玩家:500 马克斯队:30 用户标识:“SnMuRZEVqyN***……***hv2” 用户邮件:“nscoachtools@gmail.com" 用户名:“Nicola Salvaro” 用户图片:“https://lh4.googleusercontent.com/-L7

我刚刚发现Firebase有点奇怪,我想知道是我做错了什么,还是有办法解决这个问题

基本上,这就是我开发应用程序时它一直在写的内容(这正是我所期望的):

nscoachtools@gmail¸com
最大匹配数:60
最大玩家:500
马克斯队:30
用户标识:“SnMuRZEVqyN***……***hv2”
用户邮件:“nscoachtools@gmail.com"
用户名:“Nicola Salvaro”
用户图片:“https://lh4.googleusercontent.com/-L7lSPz0VJ9A/..."
用户令牌:-1

这是我在发布模式下构建应用程序后所写的内容:

nsalvaro77@gmail¸com
答:“尼古拉·萨尔瓦罗”
b:“ESjqwuh***……***wg1”
c:“nsalvaro77@gmail.com"
d:“https://lh4.googleusercontent.com/-2kwSEmLEN1c/..."
e:-2
f:30
g:500
h:60
userToken:149975285255

每一个“标题”都被替换为一封信。而“e:”应该是“userToken:”然后,当我试图更新它时,它用正确的字符串编写它,但不是在原始值的顶部。。。刚刚写了一个新的。然后,当我尝试读取完整用户时,它得到的是“e:”的值,而不是“userToken:”的值


我做错什么了吗?

在发布模式下,Proguard正在缩小您的Android应用程序。此过程会剥离未使用的方法,并缩短其他方法的名称

因此,您的POJO类(从Firebase读取/写入的类)将获得新的方法名,Firebase将反射性地使用这些方法名来确定JSON中的属性

解决方案是告诉Proguard不要修改POJO的方法名

关于这方面的更多信息:

  • 关于如何做到这一点,最古老的问答是:。但这是Firebase 2.x中的一个,而其中许多是Firebase 9及更高版本中自动包含的
  • 还可以使用
    @Keep
    标记类,请参阅
  • 关于这个话题更有趣的问答:

谢谢!!!在我的例子中,添加@Keep就足够了,一切都很完美!你救了我一天!!很高兴听到这个解决了你的问题。我总是忘记
@Keep
,而这似乎是最快的方法。所以这对我来说也是一个很好的提醒