好的,所以我成功地能够使用 android NDK 和我用于 sqlite3_create_function 的代码构建 sqlite,但是当我尝试在游标查询中使用它时,它说没有函数。我在 Stackoverflow 上的其他地方听说这是因为 SQLite 的 Java 实现没有该功能,但 C 有。我该如何抵消这一点并使其发挥作用?使用该函数从 android sdk 重新编译 sqlite3 会更好还是不会有什么不同?这是我使用的 Android.mk 文件。
LOCAL_PATH := $(call my-dir)
#####################################################################
# build sqlite3 #
#####################################################################
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := sqlite-amalgamation-3071700
LOCAL_MODULE := sqlite3
LOCAL_SRC_FILES := sqlite-amalgamation-3071700/sqlite3.c
include $(BUILD_STATIC_LIBRARY)
#include $(BUILD_SHARED_LIBRARY)
#####################################################################
# build our code #
#####################################################################
include $(CLEAR_VARS)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/sqlite-amalgamation-3071700
LOCAL_MODULE := fts3-rank
LOCAL_SRC_FILES := fts3-rank.c
LOCAL_STATIC_LIBRARIES := libsqlite3
#LOCAL_SHARED_LIBRARIES:=libsqlite3
LOCAL_LDLIBS := -llog -lm
include $(BUILD_SHARED_LIBRARY)
#need main function to have executable
#include $(BUILD_EXECUTABLE)
我用于 fts3-rank 的代码位于https://github.com/coolaj86/sqlite3-fts4-rank/blob/master/fts4-rank.c
我在查询中正确使用了 rank() 而不是 rankfunc()。我的 C 代码或 Activity 中的本机方法中也没有包含 JNI,因为当我不在 Activity 中调用该方法时,我看不出它有什么用处。我只需要在查询中使用它。是的,我做了 loadLibrary 并且没有在设备上收到该错误。网上没有关于如何做到这一点的指南,所以希望有人能回答。目的是在没有 Lucene 的情况下在 Android 中进行相关性排名(你甚至可以在 Android 中使用它吗?)。