#ndk make 笔记记录
ndk-build:The shell script is the starting point of Android NDK build system.
ndk-gfb: The shell script is GNU origin native components.
ndk-stack: The shell script can be helpful in analysis bug.
build: The package includes all Android NDK module.
platforms: The package includes different API head files and lib files.
samples: The directory includes some examples.
sources: The directory includes some share module.
toolchains: The directory includes different ABI cross compiler.
--------------------------------------------------------------A GNU Makefile fragment
#Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jin
LOCAL_SRC_FIELS := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
#build the shared lib which will generate a so file.
#build several share libs
LOCAL_PATH := $(call my-dir)
#module 1
include $(CLEAR_VARS)
LOCAL_MODULE := module1
LOCAL_SRC_FILES := module1.c
include $(BUILD_SHARED_LIBRARY)
#module 2
include $(CLEAR_VAR)
LOCAL_MODULE := module2
LOCAL_SRC_FILES := module2.c
build static lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := avilib
LOCAL_SRC_FILES := avilib.c platform_posix.c
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := module
LOCAL_SRC_FILES := module.c
LOCAL_STATIC_LIBRARIES := avilib
dynamic link share lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VAR)
LOCAL_MODULE := avilib
LOCAL_SRC_FILES := avilib.c platform_posix.c
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := module2
LOCAL_SRC_FILES := module2.c
LOCAL_SHARD_LIBRARIES := avilib
include &(BUILD_SHARD_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := module1
LOCAL_SRC_FILES := module1.c
LOCAL_SHARED_LIBRARIES := avilib
include &(BUILD_SHARD_LIBRARY)
several NDK projects share the lib module
#android.mk
LOCAL_PATH :+= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := avilib
LOCAL_SRC_FILES := avilib.c platform_posix.c
include $(BUILD SHARD LIBRARY)
use the outer shared lib
include $(CLEAR_VARS)
LOCAL_MODULE := module
LOCAL_SRC_FILES := module.c
LOCAL_SHARED_LIBRARIES := avilib //!!!
include $(BUILD_SHARED_LIBRARY) //!!!
$(call import-module,transcode/avilib) // default only search ndk path.默认情况下,只搜索ndk/sources目录, 可以配置 NDK_MODULE_PATH环境变量
Prebuilt Lib
LOCAL_PATH := $(call my-dir)
LOCAL_MODULE := avilib
LOCAL_SRC_FILES := libavilib.so //这是实际 so 相对于LOCAL_PATH的位置 该目录下有mk文件 包含LOCAL_PATH CLEAR LOCAL_SHARED_LIBRARIES := avilib
include $(PREBUILD_SHARED_LIBRARY)
build exe file
include $(CLEAR_VARS)
LOCAL_MODULE := module
LOCAL_SRC_FILES := module.c
LOCAL_STATIC_LIBHRARIES := avilib
include $(BUILD_EXECUTABLE)
other system variable
TARGET_ARCH //example : arm
TARGET_PLATFORM // example : android-3
TARGET_ARCH_ABI // CPU archtecture and ABI name
TARGET_ABI // aim platform and ABI
LOCAL_MODULE_FILENAME : //optional override the module name
LOCAL_CPP_EXTENSION : //amending C++ source file default
LOCAL_CPP_FEATURES //optional indicate C++ feature
LOCAL_C_INCLUDES //optional NDK installation path
LOCAL_CFLAGS // optional complie FLAGS
LOCAL_CPP_FLAGS // optional complie CPP FLAGS
LOCAL_WHOLE_STATIC_LIBRARIES // LOCAL_STATIC_LIBRARIES `s varant for indicating all should be included static lib.
LOCAL_LDLIBS // link flag optional list.
LOCAL_ALLOW_UNDEFINED_SYMBOLS // optional , it fobiddens check undefine symbol
LOCAL_ARM_MODE // optional ARM machine specific variable for indicating arm binary style.
LOCAL_ARM_NEON //optional ARM machine specific varibal for indicating source file should use ARM high single command that muti data stream inline function.
LOCAL_DISABLE_NO_EXECUTE //optional forbidden NX Bit safity feature. NX Bit means Never Execute