创建签名的APK后,我的Android本地数据库不起作用

问题描述

问题: 创建签名的APK后,Android本地数据库无法正常工作。

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

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

解决方法

这是由于对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.*
,

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

解决方案是:在生成签名的APK enter image description here之前删除生成的测试文件夹。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...