我正在通过JNI开发一个带有Java组件和C ++组件的Android应用程序。 C ++组件用于其他平台。
如果C ++组件可以查询现有的SQLite数据库(通过SQLite C API),而不必将调用发送到Java端,那将使我的生活变得更加轻松。
我知道这是一个很长的镜头,有没有人尝试过这个?
答案 0 :(得分:2)
不,NDK仅提供有限的api。唯一正式支持的领域是:
来自ndk docs。
答案 1 :(得分:1)
如果您不需要从java访问数据库,那么就Android而言,它只是您有权访问的目录中的文件。通过平台的libsqlite.so和经过批准的java包装器访问它是一种方法,但是如果你真的想要的话,绝对没有什么能阻止你使用你自己的sqlite实现来操作你自己的文件。
因为它是你自己的实现(可能是基于当前平台的副本),所以你在技术上并没有滥用私有api,因为即使平台的版本以不兼容的方式发展,你也可以控制你自己的副本的演变
如果您想优化软件包大小,可以先“评估”平台的libsqlite.so,以决定是否可以使用它,如果没有从服务器下载自己的版本。在我的设备上它只有大约300K。但是,这也依赖于其他非ndk库,因此完全遵循nkd“规则”的版本可能会稍微大一点,因为它需要复制其他一些东西,比如libutils等。
那么问题是你是否更好:
答案 2 :(得分:0)
尝试将此自定义NDK与标准C ++库支持http://www.crystax.net/android/ndk-r4.php
一起使用