http://www.sqlite.org/rtree.html中提到,r*tree是“作为综合部分包含但默认情况下被禁用的”,要启用它,“只需使用定义了SQLITE_ENABLE_RTREE C预处理器宏进行编译”。
我想在我的Android应用程序中使用R-trees,但显然SQLite已经预先安装等等。有没有办法在用户的手机/设备上启用它?
或者,是否可以使用NDK和免费提供的SQLite源代码?
http://www.sqlite.org/rtree.html中提到,r*tree是“作为综合部分包含但默认情况下被禁用的”,要启用它,“只需使用定义了SQLITE_ENABLE_RTREE C预处理器宏进行编译”。
我想在我的Android应用程序中使用R-trees,但显然SQLite已经预先安装等等。有没有办法在用户的手机/设备上启用它?
或者,是否可以使用NDK和免费提供的SQLite源代码?
2017年6月
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();
以下是相关链接:
注意,以上链接保留了HTML标签。这对我有用,从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)
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数据库。