我有一个项目结构如下。我想要做的就是用 SQLite 源构建一个静态库,但是由于某种原因,当我运行 ndk-build 时,它也会构建其他源——就好像它在其他位置包含 Android.mk 文件一样。
jni/SQLite
jni/SQLite/Android.mk (the only .mk file that I want to build)
jni/TT
jni/Application.mk
jni/Android.mk (for building everything such as SDL2)
TT 是指向 /work/TT 的符号链接,其中包含许多跨平台源文件,包括 SQLite、SDL2 和其他源。
/work/TT
/work/TT/SQLite
/work/TT/SQLite/sqlite3.c
/work/TT/SDL2
..
这是 jni/SQLite/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
TT_PATH := /work/TT
SRC_SQLITE := $(TT_PATH)/SQLite/sqlite3.c
LOCAL_C_INCLUDES += $(NDK_APP_PROJECT_PATH)/jni
LOCAL_MODULE := SQLite
LOCAL_SRC_FILES := $(SRC_SQLITE)
include $(BUILD_STATIC_LIBRARY)
为什么要构建其他文件?仅构建 SQLite 我需要做什么?
在命令提示符下,我位于以下文件夹中:jni/SQLite
我运行 ndk-build(与上面的 Android.mk 内容相同的文件夹)
我希望看到 sqlite3.c 是唯一编译的文件。但是不,我看到所有 SDL2 项目文件都在构建中。
编译完所有文件后,如果我再次运行 ndk-build,我会看到:
MacbookPro:SQLite admin$ ndk-build
[armeabi-v7a] Install : libSDL2.so => libs/armeabi-v7a/libSDL2.so
[armeabi-v7a] Install : libmain.so => libs/armeabi-v7a/libmain.so
这清楚地显示了正在构建的模块 SDL2 和 main.. 但是为什么呢?
也许我应该使用:
ndk-build -f Android.mk
..构建我唯一想要的 Android.mk 而不是自动搜索/构建我的 jni 文件夹?
当我这样做时,我收到以下错误,但至少看起来好像它正在尝试运行一个特定的 Android.mk:
MacbookPro:SQLite admin$ ndk-build -f Android.mk
Android NDK: Trying to define local module 'SQLite' in Android.mk.
Android NDK: But this module was already defined by /Work/TT/android-TT/app/src/main/jni/SQLite/Android.mk.
/Android/android-ndk-r9d/build/core/build-module.mk:34: *** Android NDK: Aborting. . Stop.
我的 Application.mk 如下,但这在我运行 ndk-build 的 SQLite 文件夹中不存在,这是 jni/Application.mk:
# Uncomment this if you're using STL in your project
# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information
APP_STL := gnustl_static
APP_PLATFORM := android-14
APP_ABI := armeabi-v7a
更新:我试过:
ndk-build -d -f Android.mk
..并且调试输出显示 SDL2/Android.mk 和其他 .mk 文件仍在被调用。如何停止这种递归行为,使其仅在当前文件夹中构建 Android.mk?
这是我看到的调试输出的片段:
Reading makefile `/Work/TT/android-TT/app/src/main/jni/SDL/Android.mk' (search path) (no ~ expansion)...
Reading makefile `/Work/TT/android-TT/app/src/main/obj/local/armeabi-v7a/objs/main/SQLite/sqlite3.o.d' (search path) (don't care) (no ~ expansion)...