Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8c4d1ad authored by Michael Hoisie's avatar Michael Hoisie
Browse files

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
parent 1a508c50
Loading
Loading
Loading
Loading
+7 −13
Original line number Diff line number Diff line
@@ -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: [
+35 −49
Original line number Diff line number Diff line
@@ -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[] =
{
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 },
        {"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 },
        {"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 },
        {"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)
+3 −3
Original line number Diff line number Diff line
@@ -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)},
+1 −6
Original line number Diff line number Diff line
@@ -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,
        },
+2 −0
Original line number Diff line number Diff line
@@ -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) {
Loading