2013-03-14 41 views
2

我正在寻找使用android应用程序打包大型sqlite数据库,大约200-300MB。从我读过的内容来看,我的选项将其放入资产文件夹中,并在运行时对其进行复制,从而导致重复数据,或者在运行时从Web下载数据库。我不想为这个应用程序创建一个网络服务器,所以我想创建一个单独的应用程序,只安装数据库来解决数据重复问题。使用android包装大型数据库

所有这些都很不好,我想知道是否有更好的解决方案?

回答

0

我测试apk expansion files。我用100 MB的sqlite数据库创建了一个测试应用程序,将apk和数据库上传到Play商店。然后我将应用程序下载到手机上,同时下载了数据库。该数据库自动重命名并放置在可公开访问的目录:

/storage/sdcard0/Android/obb/com.example.app/main.1.com.example.app.obb 

该应用程序能打开数据库,没有任何问题,但需要外部的读取和写入权限。新的和原始的数据库有点儿相同。这似乎是我用例的最佳解决方案。

有几个问题,新的android开发者控制台不支持上传扩展文件,所以需要使用旧的。谷歌只允许2个扩展文件,所以这可能是一些用例的问题。谷歌说,你不能重命名或删除文件,并且如果没有自动安装,你的应用程序必须能够从谷歌本身下载文件。

3

首先,我不认为您可以将200-300MB的数据库放入资产文件夹,并将其作为单个apk分发,因为apk文件大小的硬限制是(根据谷歌的文档)50 MB和我怀疑你的数据库会压缩那么远..谷歌引入了“APK扩展文件”用你的apk打包大文件。你可以在这里阅读所有关于这些:http://developer.android.com/google/play/expansion-files.html

我认为(但我没有经验扩展文件我自己),这不会解决你提到的有关处理重复数据的问题,因为需要复制你的数据库文件,但至少这会帮助你,因为你不必在自己的网络服务器上托管数据库文件。我很快地扫描了上面给出的链接上的文档,并清楚地表明,当你完成这些扩展文件时,不应该丢弃扩展文件,所以对这部分没有帮助。

当然,对于“设置自己的web服务器部分”:我甚至不打扰建立我自己的web服务器。有很多派对为你提供一些文件托管服务。也许你将不得不支付带宽,但嘿..如果人们下载你的db文件很多,这也意味着你的应用程序做得很好;-)

+0

它看起来像它将扩展文件重命名为obb(不透明二进制blob)。是否有可能使用obb文件作为一个sqlite数据库就地而不应付它?这将是一个更好的解决方案。 – Spacehamster 2013-03-14 23:08:42

+0

当我编写答案时,我想知道同样的事情,但我没有使用扩展文件的经验。我的猜测是,就像.apk文件一样,扩展文件被压缩。我不认为你可以在原地使用那个数据库文件。但说实话,我真的不知道。如果可以这样做,那么肯定会是更好的解决方案。 – baske 2013-03-15 07:30:12

+0

在概述中,它建议使用压缩文件来节省带宽,并且它们是不透明二进制斑点的事实表明它们不是自动压缩。 – Spacehamster 2013-03-15 08:45:15