我有一个 150 Mb 的 SQLite 数据库,他们希望将其包含在应用程序中,这样首次使用的用户在从 Google Play 安装后就不会面临下载。有人建议用 MacBook 可以做到这一点:
我使用 LZMA2 压缩方法,将整个数据库的大小减少到 39mb,然后将该压缩文件移动到 flutter 应用程序的 asset 文件夹,然后使用 flutter 存档包解压缩,然后使用 SQLite 从未压缩文件安装该数据库。无论你有什么文件,现在尝试使用 flutter archiver 解压缩它
这样做:
我想在我的应用程序中使用此数据库而不增加应用程序大小(我想将其设置为 90 Mb)。使用 flutter_archive 包我失败了。
根据您的问题详细信息,您已经找到了解决方案。我回答这个问题是为了让您了解应用程序运行时的概念。
在我向您提供逐步程序之前,这里是您问题的答案
1. user can delete db from his storage ?
答案是肯定的,用户可以使用一些技巧来删除它,例如清除应用程序数据,因为用户拥有手机,因此他/她有权对层级设备执行任何操作。
2. sqlite database will extract itself inside application and increase app size without showing db to user?
是的,你也可以实现这一点,但你需要为此编写代码,数据库不会自行处理
3. if i will import in user phone storage then cleaner of mobile phone will delete this db as well ?
这取决于您存储数据库文件的位置,您应该将文件放在
Path Provider包中的
getApplicationDocumentsDirectory()
位置,保存在该位置的所有数据只有在不使用 root 权限的情况下才能从您的应用程序访问。
将数据库文件保存到公共目录(例如下载或文档文件夹)中是危险的。它还建议不要使用这种方法。
4. can i use it db as runtime after unzip
这个问题的答案是肯定的,您可以在运行时使用它,您只需要在尝试访问其数据之前检查文件是否存在
现在让我们进入正题,如何实现它
Step 1 -> 你需要先压缩文件,例如使用zip(大多数人使用的),无论你使用什么操作系统,都不需要使用mac将任何文件压缩为zip格式。
第 2 步 -> 将压缩数据库复制到您的项目资产文件夹
第 3 步 -> 现在在您的应用程序主功能或数据初始化阶段检查在初始化数据库之前是否已解压数据库文件。
第 4 步 -> 如果未找到数据库文件,则使用 archive 插件
从压缩文件中解压缩数据库仅此而已。现在您可以运行并测试您的应用程序