当我制作签名的 APK 时,我的 Android 本地数据库不起作用
Posted
技术标签:
【中文标题】当我制作签名的 APK 时,我的 Android 本地数据库不起作用【英文标题】:My Android local database doesn't work when I make a signed APK 【发布时间】:2020-12-10 07:02:12 【问题描述】:问题: 当我制作签名的 APK 时,android 本地数据库不起作用。
更多信息:我尝试使用房间数据库,但失败了。然后我尝试了 Sugar ORM,但还是失败了。
在我制作签名 APK 之前,一切都在调试模式下完美运行。它无法从本地数据库写入或读取。我已经更新了 Android Studio,但仍然失败。
【问题讨论】:
检查您的混淆规则。很可能您的模型类被混淆了并且干扰了 Sugar 的反射逻辑。也必须与 Room 类似。您可以防止混淆模型.. 【参考方案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之前删除生成的测试文件夹。
【讨论】:
以上是关于当我制作签名的 APK 时,我的 Android 本地数据库不起作用的主要内容,如果未能解决你的问题,请参考以下文章
您如何从 Eclipse 内部制作签名和混淆的 android 版本?
如何在Android Studio 1中创建签名apk时禁用Eclipse之类的错误
为 android studio 项目生成签名 APK 时,通用包装器中没有匹配的架构