代码之家  ›  专栏  ›  技术社区  ›  Jim Blackler

Android JNI,有没有一种C++代码可以直接读取应用程序的SQLite数据库?

  •  2
  • Jim Blackler  · 技术社区  · 15 年前

    这将使我的生活变得相当容易,如果C++组件可以查询现有SQLite数据库(通过SQLite C API),而不必shell调用到java端。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Cheryl Simon    15 年前

    不,NDK只提供有限的api。唯一的官方支持领域是:

    • libm(数学库)头文件
    • JNI接口头
    • liblog(Android日志)头
    • OpenGL ES 1.1和OpenGL ES 2.0(三维图形库)标题
    • libjnigraphics(Pixel buffer access)头(适用于Android 2.2和 上面)。
    • C++支持的最小集头

    ndk docs

        2
  •  1
  •   Chris Stratton    15 年前

    如果您不需要从java访问数据库,那么就android而言,它只是您有权访问的目录中的一个文件。通过平台的libsqlite.so文件认可的java包装器是一种方法,但是如果您真的愿意,绝对没有什么可以阻止您使用自己的sqlite实现来操作自己的文件。

    因为它是您自己的实现(可能基于当前平台的一个副本),所以从技术上讲,您并没有滥用私有api,因为即使平台的版本以不兼容的方式演化,您也可以控制您自己副本的演化。

    如果您想优化包大小,可以首先“评估”平台的libsqlite.so文件决定是否可以使用它,如果不能,从服务器下载自己的版本。在我的设备上,它只有大约300K。但是,它对其他非ndk lib也有一些依赖性,所以完全遵循nkd“规则”的版本可能会更大一些,因为它需要复制libutils等其他东西的位。

    那么问题是,你是否应该:

    • 通过jni(android方式)回电
    • 使用您自己的实现(安全但创建起来很麻烦)
        3
  •  0
  •   Charles Ma    15 年前

    尝试使用标准C++库支持的自定义NDK http://www.crystax.net/android/ndk-r4.php

    推荐文章