Android SQLite R-Tree – ¿Cómo instalar el módulo?
Http://www.sqlite.org/rtree.html dice que el árbol r * es "incluido como parte de la amalgamación pero está deshabilitado por defecto" y para habilitarlo "simplemente compilar con la macro de preprocesador SQLITE_ENABLE_RTREE C definida"
Bueno, quiero usar R-árboles en mi aplicación Android, pero claramente SQLite es todo pre-instalado, etc ¿Hay una manera de habilitarlo en el teléfono de un usuario / dispositivo?
- Pasar los datos a otro fragmento de vista de desplazamiento con la pestaña de estudio de Android, no botón
- SQLite onUpgrade ()
- Entender el campo de incremento automático de Android de sqlite
- Conexión con Sqlite en android a través de Servlet
- Obtener todos los elementos alrededor de un determinado punto de la base de datos SQLite
Alternativamente, ¿es posible utilizar el NDK y el código fuente libremente disponible para SQLite?
- cláusula multiple where en android
- Ordenar una lista en orden ascendente por fecha desde sqlite
- Eliminar fila de SQLite con cláusula where con cláusulas múltiples
- ¿Es Sqlite Database thread de instancia seguro
- Android Sqlite IN, sin sintaxis
- Android NullpointerException al intentar recuperar datos de SQLiteOpenHelper
- Código de error SQLite 17
- Cómo eliminar tablas y bases de datos con Sqiltehelper en android
Usted puede absolutamente compilar su propia versión de SQLite. Esto lo hacemos para habilitar los módulos de cifrado / codec de wxSQLite. Echa un vistazo a la fuente SQLite en el repositorio de Android Git. Básicamente es tan fácil y crea un Android.mk con las opciones (como SQLITE_ENABLE_RTREE) que te gustaría habilitar. Por supuesto, esto le dará una biblioteca nativa. Para usarlo necesitarás acceder desde el NDK o crear un wrapper (de nuevo, puedes mirar el repositorio de Android y las envolturas de Java / JNI a SQLite)
Esto funcionó para mí, extracto del archivo Android.mk. Es para spatialite, sqlite extensión espacial.
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 da exactamente la respuesta a su pregunta y contiene una guía paso a paso para instalar SQLite para su aplicación con NDK / JNI.
Tenga en cuenta que tiene que agregar LOCAL_CFLAGS += -DSQLITE_ENABLE_RTREE
en el archivo jni / sqlite / Android.mk como sugiere la documentación para compilar con R-Tree Module habilitado.
No olvide actualizar sus importaciones o se utilizará la base de datos SQLite predeterminada.
Junio 2017
- Ir a la página de descarga y agarrar sqlite-android-xxxxx.aar
- Cambiar el nombre a .aar en lugar de .zip
- Cree un proyecto sencillo con Android Studio ( sin necesidad de soporte de C ++)
- En el árbol del proyecto, haga clic con el botón derecho del ratón en app / new / Module, seleccione Importar .JAR / .AAR Package
- Seleccione el archivo renombrado, haga clic en finalizar
- En Android Studio vaya al menú: Archivo / Estructura del proyecto. Haga clic en la aplicación (en Módulos), seleccione la pestaña Dependencias, Añadir dependencia del módulo SQLite-android-xxxxx
- Antes de utilizar cualquier función SQLite, llame a: System.loadLibrary ("sqliteX");
- Sustituya las importaciones de SQlite por org.sqlite.database.sqlite.xxxxxx
-
En onCreate puede realizar una prueba rápida con una base de datos de memoria:
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();
Los enlaces (para todo lo anterior):
- Fijaciones Android de SQLite
- Instalación
- Aplicación muy sencilla
- Programación de aplicaciones
- El módulo SQLite R * Tree
- ¿Cómo puedo reproducir archivos de vídeo diferentes en la aplicación Android?
- ¿Cómo llamar a la actividad de un proyecto de la actividad de otro proyecto en android? También viceversa?