gpt4 book ai didi

android - 当我生成签名的 apk 时,将错误的数据保存到 Firebase 数据库

转载 作者:行者123 更新时间:2023-12-05 00:16:35 24 4
gpt4 key购买 nike

当我运行 USB 调试应用程序时,它会在我注册用户时正确保存数据:

enter image description here

但是当我生成签名的 apk 时,执行相同的过程会以这种方式将其保存在 Firebase 数据库中:

enter image description here

发生了什么事? (我使用android studio)

最佳答案

这是因为 proguard 删除(混淆)未使用的代码并将类和类成员(变量和方法)名称重命名为更短的名称。有两种方法可以让它们保持你想要的样子

OPTION 1. Add annotation before every field and between parentheses put what name you want to be displayed in Firebase.

方法A)向公共(public)字段添加注释

public class Datum {
@PropertyName("name")
public String name;
}

方法 B) 将注释添加到 public setter/getters如果您的字段是私有(private)的

public class Datum {

private String name;

@PropertyName("name")
public String getName() {
return name;
}

@PropertyName("name")
public void setName(String name) {
this.name = name;
}
}

OPTION 2. Configure proguard file to keep class, field and method names as is.

方法 A) 按照 Firebase docs 进行操作。将以下行添加到您的 proguard 文件中。下面几行表示 models每个类成员的名称(字段、构造函数和方法)包和 models 的子包中目录将保持原样。

  # Add this global rule
-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) 添加包中的所有类

假设您的所有模型类都在 models 内包,并且您希望在该包中保持所有类和类成员的名称完整。然后你必须将以下行添加到你的 proguard 文件中。

-keep class com.josiah.app.data.models.** { *;}

注意:

  • *表示类内的所有内容(字段、方法和构造函数)
  • ** package 之后表示该包中的所有内容(子包和类)

关于android - 当我生成签名的 apk 时,将错误的数据保存到 Firebase 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57937299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com