【问题标题】:My Android local database doesn't work when I make a signed APK当我制作签名的 APK 时,我的 Android 本地数据库不起作用
【发布时间】:2020-12-10 07:02:12
【问题描述】:

问题: 当我制作签名的 APK 时,Android 本地数据库不起作用。

更多信息:我尝试使用房间数据库,但失败了。然后我尝试了 Sugar ORM,但还是失败了。

在我制作签名 APK 之前,一切都在调试模式下完美运行。它无法从本地数据库写入或读取。我已经更新了 Android Studio,但仍然失败。

【问题讨论】:

  • 检查您的混淆规则。很可能您的模型类被混淆了并且干扰了 Sugar 的反射逻辑。也必须与 Room 类似。您可以防止混淆模型..

标签: android sqlite android-room sugarorm signed-apk


【解决方案1】:

这是因为 proguard 混淆。将您的数据库模型添加到 proguard-rules.pro 文件中,以防止它们在构建过程中被混淆。例如,您的联系人表有一个名为 ContactModel.java 的类,如下所示:

@Entity(tableName = "contacts")
public class ContactModel {
    @PrimaryKey(autoGenerate = true)
    public int id;

    @ColumnInfo(name = "name")
    public String name;

    @ColumnInfo(name = "number")
    public String number;

}

班级地址是com.example.myapp.model.ContactModel.java。您应该像这样向proguard-rules.pro 添加一条规则:

-keep public class com.example.myapp.model.ContactModel

如果你有很多类并且你不想一个一个地添加它们,你只需要将它们全部添加到一个包中;例如model,然后在地址末尾加上*而不是类名,如下所示:

-keep public class com.example.myapp.model.*

【讨论】:

    【解决方案2】:

    问题是,我没有删除测试生成的文件夹。因此,在已签名的 apk 中,生成的测试文件夹中的文件会引发错误,这甚至可能不会导致应用程序崩溃,而是会阻止您的应用程序执行任务搜索,例如保存在本地数据库中,甚至从 Internet 获取数据。

    解决方法是:在制作签名apkenter image description here之前删除生成的测试文件夹。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 2019-06-21
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多