目錄結構
jni/
Android.mk
Application.mk
mylib/
include/
src/
Android.mk
Application.mk (全局配置)
APP_OPTIM := release
APP_PLATFORM := android-21
APP_STL := c++_static
APP_CPPFLAGS := -frtti -fexceptions -DANDROID
APP_ABI := arm64-v8a armeabi-v7a x86 x86_64
APP_MODULES := mylib
模塊 Android.mk (mylib/Android.mk)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib
LOCAL_SRC_FILES := src/file1.cpp src/file2.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)
主 Android.mk (jni/Android.mk)
LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
構建命令
ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./jni/Android.mk
關鍵點
APP_STL 選 c++_static 避免多庫 STL 衝突。
LOCAL_EXPORT_C_INCLUDES 讓依賴模塊自動獲取頭文件路徑。
- 靜態庫用
BUILD_STATIC_LIBRARY,動態庫用 BUILD_SHARED_LIBRARY。
- CMake (現代 NDK 推薦) 替代 mk 文件,語法更清晰,IDE 支持更好。