summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Michael Hoisie <hoisie@google.com> 2024-10-01 22:54:13 +0000
committer Michael Hoisie <hoisie@google.com> 2024-10-04 01:51:09 +0000
commita8c4d1ad69658d32d946b940429ce0027c9f78c1 (patch)
tree08bc9abca33cf48192a139e22ee5cf8f78024d14
parent1a508c50a1bf13a841012eb2b7a9802c765ca9c8 (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.bp20
-rw-r--r--core/jni/android_database_CursorWindow.cpp84
-rw-r--r--core/jni/platform/host/HostRuntime.cpp6
-rw-r--r--libs/androidfw/Android.bp7
-rw-r--r--libs/androidfw/CursorWindow.cpp2
-rw-r--r--libs/androidfw/include/androidfw/CursorWindow.h4
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; }