这是我们的情况:
我们有一些本机代码可以在特定时间扫描用户定义的目录。目标是收集有关特定类型文件的数据并从中构建 SQLite 数据库。可能有数以万计的文件要查询。
问题是每次找到一个文件时,收集的关于该文件的数据必须通过 JNI 边界引入 Java 领域,然后通过 Android SDK 提供的 SQLite 类提交到数据库。这需要的时间太长了。
建议的解决方案是下载 SQLite 源代码,将其链接到我们的项目中,并按照此处所述本地构建数据库:SQLite with Android NDK。这将完全消除将数据从 C++ 层传递到 Java 层所花费的时间。
问题是:如果这样做了,Android SDK(Java层)是否仍然可以正常打开数据库,获取Cursor对象等?我们可以保持数据库极其简单;没有外键、触发器、约束等。虽然索引是非常可取的。
我们已经考虑使用管道和套接字跨 JNI 边界移动数据。但是,Fat32 文件系统不支持命名管道(因此,如果用户将应用程序移动到 Fat32 格式的 SD 卡,这将不可用)。套接字也不可用,因为我们必须在清单中包含互联网权限,我们觉得这看起来很可疑。
如果有人对此有任何信息,我们很乐意听取您的意见。
非常感谢,P。