Android SQLite R-Tree - How to install module?

后端 未结 4 964
灰色年华
灰色年华 2020-12-10 07:59

http://www.sqlite.org/rtree.html says that the r*tree is \"included as part of the amalgamation but is disabled by default\" and to enable it \"simply compile with the SQLIT

相关标签:
4条回答
  • 2020-12-10 08:42

    This worked for me, extract from Android.mk file. It is for spatialite, sqlite spatial extension.

    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)
    
    0 讨论(0)
  • 2020-12-10 08:57

    https://www.sqlite.org/android/doc/trunk/www/index.wiki gives exactly the answer to your question and contains a step-by-step guide to install SQLite for your application with NDK/JNI.

    Note that you have to add LOCAL_CFLAGS += -DSQLITE_ENABLE_RTREE in the jni/sqlite/Android.mk file as suggested by the documentation to compile with R-Tree Module enabled.

    Don't forget to update your imports or the default SQLite database will be used.

    0 讨论(0)
  • 2020-12-10 09:00

    You can absolutely compile your own version of SQLite. We do this in order to enable the encryption/codec modules from wxSQLite. Take a look at the SQLite source in the Android Git repository. Basically it's as easy and creating a Android.mk with the options (such as SQLITE_ENABLE_RTREE) you'd like enabled. Of course, this will give you a native library. In order to use it you'll need to access it from the NDK or create a wrapper (again, you can look at the Android repository and Java/JNI wrappers to SQLite)

    0 讨论(0)
  • 2020-12-10 09:05

    June 2017

    1. Go to the: download page and grab sqlite-android-xxxxx.aar
    2. Rename it to .aar instead of .zip
    3. Create a simple project with Android Studio (no need for C++ support)
    4. In the project tree right click app / new / Module select Import .JAR/.AAR Package
    5. Select the renamed file, click finish
    6. In Android Studio go to menu: File / Project structure. Click app (under Modules), select the Dependencies Tab, Add module dependency SQLite-android-xxxxx
    7. Before using any SQLite functions, call: System.loadLibrary("sqliteX");
    8. Replace SQlite imports to org.sqlite.database.sqlite.xxxxxx
    9. In onCreate you can make a quick test with a memory database:

      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();
      

    The links (for all of the above):

    • SQLite Android Bindings
    • Installation
    • Very Simple App
    • Application Programming
    • The SQLite R*Tree Module
    0 讨论(0)
提交回复
热议问题