【问题标题】:Android: Message keys gets changed for signed apk in Firebase real time database chatAndroid:Firebase 实时数据库聊天中已签名 apk 的消息密钥已更改
【发布时间】:2019-06-06 15:22:52
【问题描述】:

我在android中开发了一个带有firebase实时数据库的聊天应用程序,它将所有消息存储在firebase实时数据库中,并且在调试模式下工作得非常好,但是当我创建一个签名的构建时它会自动将我所有的消息键更改为 a、b、c、d 等。

例如,我存储了一条带有键“name”、“message”、“image”等的消息,在调试模式下使用这些键可以很好地存储消息,但是在发布模式下,所有这些键都更改为 a、b ,c 等。

如果有人能帮我解决这个问题,我将不胜感激。

【问题讨论】:

  • 可能是proguard引起的。在你的 gradle 中尝试 minifyEnabled false 看看问题是否仍然出现。
  • @MarkWalczak 非常感谢您的回复!你能告诉我我需要做什么来防止这种情况发生吗?
  • @MarkWalczak 确定!谢谢!

标签: java android firebase firebase-realtime-database


【解决方案1】:

Proguard 会混淆您在应用中编写的代码。它会更改代码中的类名、变量名、函数名,以避免反编译您的应用程序。因此,每当您在 Firebase 中编写您所指的模型类时,您都可以使用 proguard 将这些类从混淆中省略。

为此,请按照下面提到的几个步骤操作。

  1. 转到app/proguard-rules.pro目录并打开proguard-rules.pro文件。

  2. 将以下几行添加到该文件中

-keep class com.yourpackage.model.DataModel{ public private *;}

以上行将防止类 DataModel 被 Proguard 混淆。您必须在该字段中提供您班级的正确路径。

另外,不要忘记在模型类中注释变量,如下所示:

@SerializedName("yourKeyName") 
private int yourKey;

那些“yourKeyName”将用于序列化和反序列化对象。

【讨论】:

  • 非常感谢您的回复!!我已经实施了您的回答,但问题仍然存在。
  • 你在 -keep 类前面给你的模型类提供了正确的路径吗?
  • 是的,我复制了类顶部给出的包并用.ClassName添加了类名。
  • 您是否将其添加到正确的 proguard-rules.pro 文件中?因为您通过 app/libs 添加的每个库都有不同的 proguard-rules
  • 我已经添加到 app/proguard-rules.pro 文件中了。
猜你喜欢
  • 2022-11-25
  • 1970-01-01
  • 2022-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2020-08-06
相关资源
最近更新 更多