我一直在本网站和其他人那里收集有关在Android中包含预先填充的sqlite数据库的最佳方式的信息。我只是想确认我理解为什么某些事情应该是微不足道的原因......事实并非如此。
如果我的以下结论是正确或错误的话,有人可以告诉我吗?:
让拼图变得更复杂:我在评论中找到了这个问题的接受答案:Ship an application with a database 将数据库从assets文件夹复制到另一个位置实际上对某些运行2.3+的设备不起作用。那是准确的吗?如果这是真的,那么最好的选择是在第一次运行时从网上下载数据库文件吗?
感谢您的任何澄清。
答案 0 :(得分:1)
您实际上会将apk
与设备上的实际文件夹混淆。
将apk视为安装包 - 与Windows世界的msi
不同。此安装包的整个目标是安全地验证并向您的设备提供代码和资源。在一个简单的实现中,您可以将所述代码解压缩到一个只读位置,这些资源可以读写,并且可以随心所欲。
为了节省空间,Android更加智能 - 代码和资源永远不会离开已签名的存档,所以你总是知道它是你放入的并且你不会通过存储来浪费空间代码两次。在类加载器中有一些真正的魔力,它还允许它在运行时解压缩类,但除此之外。
因此,基本上,此压缩安装包中的所有内容都是只读的(由于也是签名)。成为“安装程序”并将您需要的任何资源移动到可读写位置是您的工作。当然,你不能触摸apk
一旦它到位,因为那会导致恶意软件并且无法完成签名的全部目的。
希望这可以解决这个困惑。