diff options
author | 2024-10-01 22:54:13 +0000 | |
---|---|---|
committer | 2024-10-04 01:51:09 +0000 | |
commit | a8c4d1ad69658d32d946b940429ce0027c9f78c1 (patch) | |
tree | 08bc9abca33cf48192a139e22ee5cf8f78024d14 | |
parent | 1a508c50a1bf13a841012eb2b7a9802c765ca9c8 (diff) |
Enable SQLite JNI for host Mac and Windows
SQLite JNI can compile and run on all host platforms, including Mac and
Windows. Also, make the Parcel-specific parts Linux only.
This will make SQLite available for all host runtimes, such as
LayoutLib, Ravenwood, and Robolectric.
This is a no-op change in terms of functionality.
Test: Robolectric SQLite tests on all host platforms
Flag: EXEMPT host-only no-op change
Bug: 371219797
Change-Id: I1728e1047ac2f9a72230e14de04c6c875f6d9b57
-rw-r--r-- | core/jni/Android.bp | 20 | ||||
-rw-r--r-- | core/jni/android_database_CursorWindow.cpp | 84 | ||||
-rw-r--r-- | core/jni/platform/host/HostRuntime.cpp | 6 | ||||
-rw-r--r-- | libs/androidfw/Android.bp | 7 | ||||
-rw-r--r-- | libs/androidfw/CursorWindow.cpp | 2 | ||||
-rw-r--r-- | libs/androidfw/include/androidfw/CursorWindow.h | 4 |
6 files changed, 52 insertions, 71 deletions
diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 9797d9662387..4d2195deebae 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -73,6 +73,12 @@ cc_library_shared_for_libandroid_runtime { srcs: [ "android_animation_PropertyValuesHolder.cpp", + "android_database_CursorWindow.cpp", + "android_database_SQLiteCommon.cpp", + "android_database_SQLiteConnection.cpp", + "android_database_SQLiteGlobal.cpp", + "android_database_SQLiteDebug.cpp", + "android_database_SQLiteRawStatement.cpp", "android_os_SystemClock.cpp", "android_os_SystemProperties.cpp", "android_os_Trace.cpp", @@ -157,12 +163,6 @@ cc_library_shared_for_libandroid_runtime { "android_opengl_GLES31.cpp", "android_opengl_GLES31Ext.cpp", "android_opengl_GLES32.cpp", - "android_database_CursorWindow.cpp", - "android_database_SQLiteCommon.cpp", - "android_database_SQLiteConnection.cpp", - "android_database_SQLiteGlobal.cpp", - "android_database_SQLiteDebug.cpp", - "android_database_SQLiteRawStatement.cpp", "android_graphics_GraphicBuffer.cpp", "android_graphics_SurfaceTexture.cpp", "android_view_CompositionSamplingListener.cpp", @@ -427,6 +427,7 @@ cc_library_shared_for_libandroid_runtime { "libnativehelper_jvm", "libpiex", "libpng", + "libsqlite", "libtiff_directory", "libui-types", "libutils", @@ -442,12 +443,6 @@ cc_library_shared_for_libandroid_runtime { host_linux: { srcs: [ "android_content_res_ApkAssets.cpp", - "android_database_CursorWindow.cpp", - "android_database_SQLiteCommon.cpp", - "android_database_SQLiteConnection.cpp", - "android_database_SQLiteGlobal.cpp", - "android_database_SQLiteDebug.cpp", - "android_database_SQLiteRawStatement.cpp", "android_hardware_input_InputApplicationHandle.cpp", "android_os_MessageQueue.cpp", "android_os_Parcel.cpp", @@ -463,7 +458,6 @@ cc_library_shared_for_libandroid_runtime { ], static_libs: [ "libbinderthreadstateutils", - "libsqlite", "libgui_window_info_static", ], shared_libs: [ diff --git a/core/jni/android_database_CursorWindow.cpp b/core/jni/android_database_CursorWindow.cpp index c0e9215267e6..18c314610bb2 100644 --- a/core/jni/android_database_CursorWindow.cpp +++ b/core/jni/android_database_CursorWindow.cpp @@ -38,7 +38,9 @@ #define LOG_NDEBUG 1 #include <androidfw/CursorWindow.h> +#ifdef __linux__ #include "android_os_Parcel.h" +#endif #include "android_util_Binder.h" #include "android_database_SQLiteCommon.h" @@ -111,6 +113,7 @@ fail: return 0; } +#ifdef __linux__ static jlong nativeCreateFromParcel(JNIEnv* env, jclass clazz, jobject parcelObj) { Parcel* parcel = parcelForJavaObject(env, parcelObj); @@ -128,6 +131,7 @@ static jlong nativeCreateFromParcel(JNIEnv* env, jclass clazz, jobject parcelObj window->getNumRows(), window->getNumColumns(), window); return reinterpret_cast<jlong>(window); } +#endif static void nativeDispose(JNIEnv* env, jclass clazz, jlong windowPtr) { CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr); @@ -142,6 +146,7 @@ static jstring nativeGetName(JNIEnv* env, jclass clazz, jlong windowPtr) { return env->NewStringUTF(window->name().c_str()); } +#ifdef __linux__ static void nativeWriteToParcel(JNIEnv * env, jclass clazz, jlong windowPtr, jobject parcelObj) { CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr); @@ -154,6 +159,7 @@ static void nativeWriteToParcel(JNIEnv * env, jclass clazz, jlong windowPtr, jniThrowRuntimeException(env, msg.c_str()); } } +#endif static void nativeClear(JNIEnv * env, jclass clazz, jlong windowPtr) { CursorWindow* window = reinterpret_cast<CursorWindow*>(windowPtr); @@ -520,55 +526,35 @@ static jboolean nativePutNull(JNIEnv* env, jclass clazz, jlong windowPtr, return true; } -static const JNINativeMethod sMethods[] = -{ - /* name, signature, funcPtr */ - { "nativeCreate", "(Ljava/lang/String;I)J", - (void*)nativeCreate }, - { "nativeCreateFromParcel", "(Landroid/os/Parcel;)J", - (void*)nativeCreateFromParcel }, - { "nativeDispose", "(J)V", - (void*)nativeDispose }, - { "nativeWriteToParcel", "(JLandroid/os/Parcel;)V", - (void*)nativeWriteToParcel }, - - { "nativeGetName", "(J)Ljava/lang/String;", - (void*)nativeGetName }, - { "nativeGetBlob", "(JII)[B", - (void*)nativeGetBlob }, - { "nativeGetString", "(JII)Ljava/lang/String;", - (void*)nativeGetString }, - { "nativeCopyStringToBuffer", "(JIILandroid/database/CharArrayBuffer;)V", - (void*)nativeCopyStringToBuffer }, - { "nativePutBlob", "(J[BII)Z", - (void*)nativePutBlob }, - { "nativePutString", "(JLjava/lang/String;II)Z", - (void*)nativePutString }, - - // ------- @FastNative below here ---------------------- - { "nativeClear", "(J)V", - (void*)nativeClear }, - { "nativeGetNumRows", "(J)I", - (void*)nativeGetNumRows }, - { "nativeSetNumColumns", "(JI)Z", - (void*)nativeSetNumColumns }, - { "nativeAllocRow", "(J)Z", - (void*)nativeAllocRow }, - { "nativeFreeLastRow", "(J)V", - (void*)nativeFreeLastRow }, - { "nativeGetType", "(JII)I", - (void*)nativeGetType }, - { "nativeGetLong", "(JII)J", - (void*)nativeGetLong }, - { "nativeGetDouble", "(JII)D", - (void*)nativeGetDouble }, - - { "nativePutLong", "(JJII)Z", - (void*)nativePutLong }, - { "nativePutDouble", "(JDII)Z", - (void*)nativePutDouble }, - { "nativePutNull", "(JII)Z", - (void*)nativePutNull }, +static const JNINativeMethod sMethods[] = { + /* name, signature, funcPtr */ + {"nativeCreate", "(Ljava/lang/String;I)J", (void*)nativeCreate}, + {"nativeDispose", "(J)V", (void*)nativeDispose}, +#ifdef __linux__ + {"nativeCreateFromParcel", "(Landroid/os/Parcel;)J", (void*)nativeCreateFromParcel}, + {"nativeWriteToParcel", "(JLandroid/os/Parcel;)V", (void*)nativeWriteToParcel}, +#endif + {"nativeGetName", "(J)Ljava/lang/String;", (void*)nativeGetName}, + {"nativeGetBlob", "(JII)[B", (void*)nativeGetBlob}, + {"nativeGetString", "(JII)Ljava/lang/String;", (void*)nativeGetString}, + {"nativeCopyStringToBuffer", "(JIILandroid/database/CharArrayBuffer;)V", + (void*)nativeCopyStringToBuffer}, + {"nativePutBlob", "(J[BII)Z", (void*)nativePutBlob}, + {"nativePutString", "(JLjava/lang/String;II)Z", (void*)nativePutString}, + + // ------- @FastNative below here ---------------------- + {"nativeClear", "(J)V", (void*)nativeClear}, + {"nativeGetNumRows", "(J)I", (void*)nativeGetNumRows}, + {"nativeSetNumColumns", "(JI)Z", (void*)nativeSetNumColumns}, + {"nativeAllocRow", "(J)Z", (void*)nativeAllocRow}, + {"nativeFreeLastRow", "(J)V", (void*)nativeFreeLastRow}, + {"nativeGetType", "(JII)I", (void*)nativeGetType}, + {"nativeGetLong", "(JII)J", (void*)nativeGetLong}, + {"nativeGetDouble", "(JII)D", (void*)nativeGetDouble}, + + {"nativePutLong", "(JJII)Z", (void*)nativePutLong}, + {"nativePutDouble", "(JDII)Z", (void*)nativePutDouble}, + {"nativePutNull", "(JII)Z", (void*)nativePutNull}, }; int register_android_database_CursorWindow(JNIEnv* env) diff --git a/core/jni/platform/host/HostRuntime.cpp b/core/jni/platform/host/HostRuntime.cpp index 19f82998c1a3..88b3e1c1ed9d 100644 --- a/core/jni/platform/host/HostRuntime.cpp +++ b/core/jni/platform/host/HostRuntime.cpp @@ -115,6 +115,9 @@ static const std::unordered_map<std::string, RegJNIRec> gRegJNIMap = { #ifdef __linux__ {"android.content.res.ApkAssets", REG_JNI(register_android_content_res_ApkAssets)}, {"android.content.res.AssetManager", REG_JNI(register_android_content_AssetManager)}, + {"android.content.res.StringBlock", REG_JNI(register_android_content_StringBlock)}, + {"android.content.res.XmlBlock", REG_JNI(register_android_content_XmlBlock)}, +#endif {"android.database.CursorWindow", REG_JNI(register_android_database_CursorWindow)}, {"android.database.sqlite.SQLiteConnection", REG_JNI(register_android_database_SQLiteConnection)}, @@ -122,9 +125,6 @@ static const std::unordered_map<std::string, RegJNIRec> gRegJNIMap = { {"android.database.sqlite.SQLiteDebug", REG_JNI(register_android_database_SQLiteDebug)}, {"android.database.sqlite.SQLiteRawStatement", REG_JNI(register_android_database_SQLiteRawStatement)}, -#endif - {"android.content.res.StringBlock", REG_JNI(register_android_content_StringBlock)}, - {"android.content.res.XmlBlock", REG_JNI(register_android_content_XmlBlock)}, #ifdef __linux__ {"android.os.Binder", REG_JNI(register_android_os_Binder)}, {"android.os.FileObserver", REG_JNI(register_android_os_FileObserver)}, diff --git a/libs/androidfw/Android.bp b/libs/androidfw/Android.bp index a39f30bbad1f..385fbfe1a86a 100644 --- a/libs/androidfw/Android.bp +++ b/libs/androidfw/Android.bp @@ -75,6 +75,7 @@ cc_library { "BigBufferStream.cpp", "ChunkIterator.cpp", "ConfigDescription.cpp", + "CursorWindow.cpp", "FileStream.cpp", "Idmap.cpp", "LoadedArsc.cpp", @@ -113,7 +114,6 @@ cc_library { srcs: [ "BackupData.cpp", "BackupHelpers.cpp", - "CursorWindow.cpp", ], shared_libs: [ "libbase", @@ -147,11 +147,6 @@ cc_library { "libz", ], }, - host_linux: { - srcs: [ - "CursorWindow.cpp", - ], - }, windows: { enabled: true, }, diff --git a/libs/androidfw/CursorWindow.cpp b/libs/androidfw/CursorWindow.cpp index cbb1e8f82838..abf2b0a91642 100644 --- a/libs/androidfw/CursorWindow.cpp +++ b/libs/androidfw/CursorWindow.cpp @@ -139,6 +139,7 @@ fail_silent: return UNKNOWN_ERROR; } +#ifdef __linux__ status_t CursorWindow::createFromParcel(Parcel* parcel, CursorWindow** outWindow) { *outWindow = nullptr; @@ -240,6 +241,7 @@ fail: fail_silent: return UNKNOWN_ERROR; } +#endif status_t CursorWindow::clear() { if (mReadOnly) { diff --git a/libs/androidfw/include/androidfw/CursorWindow.h b/libs/androidfw/include/androidfw/CursorWindow.h index c2eac12eb77d..0996355cd2c4 100644 --- a/libs/androidfw/include/androidfw/CursorWindow.h +++ b/libs/androidfw/include/androidfw/CursorWindow.h @@ -23,7 +23,9 @@ #include <string> #include "android-base/stringprintf.h" +#ifdef __linux__ #include "binder/Parcel.h" +#endif #include "utils/String8.h" #include "android-base/mapped_file.h" @@ -82,9 +84,11 @@ public: ~CursorWindow(); static status_t create(const String8& name, size_t size, CursorWindow** outCursorWindow); +#ifdef __linux__ static status_t createFromParcel(Parcel* parcel, CursorWindow** outCursorWindow); status_t writeToParcel(Parcel* parcel); +#endif inline String8 name() { return mName; } inline size_t size() { return mSize; } |