gpt4 book ai didi

android - Android : Trying to put the pieces together 中的预填充数据库

转载 作者:行者123 更新时间:2023-11-29 02:08:02 25 4
gpt4 key购买 nike

我一直在这个网站和其他网站上收集有关在 Android 中包含预填充 sqlite 数据库的最佳方法的信息。我只是想确认我理解为什么有些事情应该是微不足道的……但事实并非如此。

那么有人可以告诉我我的以下结论是正确的还是错误的?:

  • 许多人建议将预填充的数据库文件从 Assets 文件夹复制到“/data/data/YOUR_PACKAGE/databases/”的主要原因是无法访问数据库文件在 Assets 文件夹中或这样做会过于复杂(?)。 (有人可以澄清这两个答案中哪一个是正确的吗?)
  • 必须将 Assets 文件夹中的数据库文件复制到其他地方的另一个重要原因是无法更新该位置中的文件。那么即使可以打开 assets 文件夹中的数据库,这也只有在不必修改该数据库时才有用。更新: 我发布了一个仅关注此问题的新线程: Opening a read only database directly in the assets folder .
  • Assets 文件夹中的文件大小只能为 1 Mb(除非它们具有某些文件扩展名,例如 mp3)。请注意,在以下情况下此限制不相关:您的数据库小于 1 Mb,或者您不介意将数据库分成 1 Mb block 并在运行时将它们放在一起,或者您不介意分发具有 mp3 扩展名的数据库文件。
  • 如果数据库文件是从 Assets 文件夹复制到“/data/data/YOUR_PACKAGE/databases/”,则无法删除 Assets 文件夹中的原始数据库文件以避免出现重复文件。这也是因为 Assets 文件夹中的文件无法修改。

让这个谜题更复杂一点:我在这个问题的已接受答案的评论中发现:Ship an application with a database将数据库从 Assets 文件夹复制到另一个位置实际上在某些运行 2.3+ 的设备上不起作用。那是准确的吗?如果这是真的,那么最好的替代方法是在第一次运行时从 Web 下载数据库文件?

感谢任何澄清。

最佳答案

您基本上将 apk 与您设备上的实际文件夹混淆了。

将 apk 视为安装包 - 与 Windows 世界的 msi 不同。此安装包的全部目标是安全地验证代码和资源并将其交付到您的设备。在一个简单的实现中,您可以将所述代码解压缩到一个只读位置,资源在某个地方是可读写的,然后就可以尽情享受了。

为了节省空间,Android 更聪明一些 - 代码和资源永远不会离开签名存档,所以您始终知道它是您放入的并且您不会通过存储代码两次。类加载器中有一些真正的魔法,它还允许它即时解压缩类,但这不是重点。

因此,本质上,此压缩安装包中的所有内容都是只读的(由于也已签名)。成为“安装程序”并将您需要的任何资源移动到可读写位置是您的工作。当然,一旦 apk 就位,您就不能再动它了,因为这会允许恶意软件并破坏签名的全部目的。

希望这能消除混淆。

关于android - Android : Trying to put the pieces together 中的预填充数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8904099/

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