【问题标题】:Android SQLite R-Tree - How to install module?Android SQLite R-Tree - 如何安装模块?
【发布时间】:2011-05-26 00:16:38
【问题描述】:

http://www.sqlite.org/rtree.html 表示 r*tree “包含在合并中,但默认情况下被禁用”并启用它“只需使用定义的 SQLITE_ENABLE_RTREE C 预处理器宏进行编译”

好吧,我想在我的 android 应用程序中使用 R-trees,但显然 SQLite 已全部预装等。有没有办法在用户的手机/设备上启用它?

或者,是否可以使用 NDK 和免费提供的 SQLite 源代码?

【问题讨论】:

    标签: android sqlite android-ndk r-tree


    【解决方案1】:

    2017 年 6 月

    1. 转到:download page 并获取 sqlite-android-xxxxx.aar
    2. 将其重命名为 .aar 而不是 .zip
    3. 使用 Android Studio 创建一个简单的项目(无需需要 C++ 支持)
    4. 在项目树中右击app/new/Module选择Import .JAR/.AAR Package
    5. 选择重命名的文件,点击完成
    6. 在 Android Studio 中转到菜单:文件/项目结构。点击 app(在 Modules 下),选择 Dependencies 选项卡,添加模块依赖 SQLite-android-xxxxx
    7. 在使用任何 SQLite 函数之前,调用:System.loadLibrary("sqliteX");
    8. 将 SQlite 导入替换为 org.sqlite.database.sqlite.xxxxxx
    9. 在 onCreate 中,您可以使用内存数据库进行快速测试:

      System.loadLibrary("sqliteX");
      
      // get the SQLite version
      String query = "select sqlite_version() AS sqlite_version";
      SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(":memory:", null);
      Cursor cursor = db.rawQuery(query, null);
      String sqliteVersion = "";
      if (cursor.moveToNext()) {
          sqliteVersion = cursor.getString(0);
      }
      
      // do some R*Tree things (this will fail for the standard SQLite)
      db.execSQL("CREATE VIRTUAL TABLE demo_index USING rtree(id, minX, maxX, minY, maxY);");
      db.execSQL("INSERT INTO demo_index VALUES(1,-80.7749, -80.7747, 35.3776, 35.3778);");
      db.execSQL("INSERT INTO demo_index VALUES(2,-81.0, -79.6, 35.0, 36.2);");
      
      cursor = db.rawQuery("SELECT id FROM demo_index WHERE minX>=-81.08 AND maxX<=-80.58 AND minY>=35.00  AND maxY<=35.44;", null);
      
      int id = -1;
      if (cursor.moveToFirst()) {
          do {
              id = cursor.getInt(0);
          } while (cursor.moveToNext());
      }
      db.close();
      

    链接(以上所有):

    【讨论】:

      【解决方案2】:

      您完全可以编译自己的 SQLite 版本。我们这样做是为了从 wxSQLite 启用加密/编解码器模块。查看 Android Git 存储库中的 SQLite 源代码。基本上,它很容易创建一个带有您希望启用的选项(例如 SQLITE_ENABLE_RTREE)的 Android.mk。当然,这会给你一个原生库。为了使用它,您需要从 NDK 访问它或创建一个包装器(同样,您可以查看 Android 存储库和 Java/JNI 包装器到 SQLite)

      【讨论】:

      • 这就是我最终做的事情,但在每个用户的设备上安装两次 SQlite 似乎仍然很愚蠢
      • 我不得不问...在这里做同样的事情。构建 sqlite3 本机没有问题。您有任何指向 SQLite 的 JNI 包装器的链接吗?我有点希望不必从头开始编写包装器。
      • @George:我们在本机代码中使用带有 C++ 包装器的 SQLite,从不直接来自 Java -> JNI,抱歉。
      • @NuSkooler 我知道你在 10 个月前写了这篇评论,但你能详细说明你是如何分发你的 SQLite 构建的吗?用户需要root权限吗?您可以将它与应用程序的其余部分一起发布吗?
      • 基本上我们有一个预先构建的 .db 文件作为 APK 中的资源提供,该文件在首次运行时被提取。从那里我们下载并执行额外的脚本(我们有一个相当大的数据集)。所有 DB 访问都是纯 C++ (通过 Java->JNI 访问)不,用户不需要 root - 您可以完全访问应用程序的数据目录。
      【解决方案3】:

      这对我有用,从 Android.mk 文件中提取。用于spatialite、sqlite空间扩展。

      include $(CLEAR_VARS)
      # -DOMIT_GEOS=0
      # ./configure --build=x86_64-pc-linux-gnu --host=arm-linux-eabi
      LOCAL_MODULE    := spatialite
      LOCAL_CFLAGS    := -D__ANDROID__ -Dfdatasync=fsync -DOMIT_GEOCALLBACKS -DSQLITE_ENABLE_RTREE
      LOCAL_LDLIBS    := -llog 
      LOCAL_C_INCLUDES := \
          libiconv-1.13.1/include \
          libiconv-1.13.1/libcharset/include \
          geos-3.2.2/source/headers \
          geos-3.2.2/capi \
          proj-4.6.1/src
      LOCAL_SRC_FILES := \
          ./libspatialite-amalgamation-2.4.0/spatialite.c \
          ./libspatialite-amalgamation-2.4.0/empty.cpp \
          ./libspatialite-amalgamation-2.4.0/sqlite3.c
      LOCAL_STATIC_LIBRARIES := iconv proj geos
      include $(BUILD_STATIC_LIBRARY)
      

      【讨论】:

        【解决方案4】:

        https://www.sqlite.org/android/doc/trunk/www/index.wiki 准确地回答了您的问题,并包含使用 NDK/JNI 为您的应用程序安装 SQLite 的分步指南。

        请注意,您必须按照文档的建议在 jni/sqlite/Android.mk 文件中添加 LOCAL_CFLAGS += -DSQLITE_ENABLE_RTREE,以便在启用 R-Tree 模块的情况下进行编译。

        不要忘记更新您的导入,否则将使用默认 SQLite 数据库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-04
          • 2017-02-13
          • 2023-03-09
          • 2013-12-30
          • 2011-03-24
          • 2018-11-17
          • 2019-09-06
          相关资源
          最近更新 更多