2

好的,所以我成功地能够使用 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 中使用它吗?)。

4

0 回答 0