当您生成签名的 apk 时,Firebase 数据库无法正常工作
Posted
技术标签:
【中文标题】当您生成签名的 apk 时,Firebase 数据库无法正常工作【英文标题】:When you generate the signed apk Firebase Database does not work correctly 【发布时间】:2020-01-15 20:19:21 【问题描述】:当我直接通过 android Studio(USB 调试)在移动设备上运行时,我的应用程序运行良好。当我在应用程序中注册时,它会在 Firebase 身份验证中创建用户帐户(ID、姓名、电子邮件)并保存 Firebase 实时数据库中的用户数据(id、name、email、region)。然后应用程序的主屏幕打开,在主屏幕的 onCreat 中,我将用户的令牌保存在数据库中。该应用程序没有给出任何错误。
问题:
但是当我生成签名的apk并将其安装在我的手机上时,通过执行相同的过程,即进行注册 用户,注册完成,但保存的节点名称奇怪,数据保存更多,而不是例如:
姓名:约翰
它已创建:
b: 约翰
之后,它会以登录用户和 crasha 应用程序打开主应用程序屏幕,因为它无法在数据库中找到正确的命名值,因此会发生空对象错误。唯一正确保存节点名称的数据是令牌,因为令牌仅在打开时保存到主屏幕的 onCreat。这没有任何意义......
我不知道是什么原因造成的,当我通过调试运行应用程序时一切正常,只需生成发生的签名 apk 并且应用程序无法使用。
注意:我尝试使用 Android App Bundle 生成而不是生成 APK,但无法解决。该应用程序在 Google Play 作为 Alpha,我已经在 Firebase 项目的“签名”下添加了出现在 Google Play 控制台上的两个 SHA-1 代码,并将 google-services 文件放入项目中,它没有解决任何一个。我不知道该怎么办。这和 ProGuard 有什么关系吗?
【问题讨论】:
@DHAVALASODARIYA,你提到的问题说它不起作用。在这种情况下,它适用于扭曲的字段名称。它是混淆类的proguard,因此名称看起来是扭曲的。在这里查看答案***.com/a/57937362/5636313 @DHAVALASODARIYA,感激不尽。 【参考方案1】:这是因为 proguard 删除(混淆)未使用的代码并将类和类成员的(变量和方法)名称重命名为更短的名称。有两种方法可以随心所欲地保留它们
选项 1. 在每个字段之前添加注释,括号之间放置您希望在 Firebase 中显示的名称。
方法 A) 为公共字段添加注释
public class Datum
@PropertyName("name")
public String name;
方法 B) 如果您的字段是私有的,则向公共 setter/getter 添加注释
public class Datum
private String name;
@PropertyName("name")
public String getName()
return name;
@PropertyName("name")
public void setName(String name)
this.name = name;
选项 2. 配置 proguard 文件以保持类、字段和方法名称不变。
方法 A) 按照 Firebase 文档进行操作。将以下行添加到您的 proguard 文件中。下面几行表示模型包和模型目录子包中每个类成员(字段、构造函数和方法)的名称将保持原样。
添加此全局规则
-keepattributes Signature
# This rule will properly ProGuard all the model classes in
# the package com.yourcompany.models. Modify to fit the structure
# of your app.
-keepclassmembers class com.yourcompany.models.** *;
方法 B) 逐个添加类
如果您想保留 User 类的名称和类成员,请添加此内容。
-keep class com.josiah.app.data.models.User *;
方法 C) 在一个包中添加所有类
假设您的所有模型类都在模型包中,并且您希望在该包中保持所有类和类成员的名称不变。然后你必须在你的 proguard 文件中添加以下行。
-keep class com.josiah.app.data.models.** *;
注意:
表示类中的所有内容(字段、方法和构造函数) ** 包后表示此包中的所有内容(子包和类)【讨论】:
以上是关于当您生成签名的 apk 时,Firebase 数据库无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
生成带有 minifyEnabled 设置为 true 的签名 APK 后,firebase UI 输出空白
生成签名的 APK:构建 APK Android Studio 时出错