一分钟学会Android.mk
1、Android.mk的作用
它是告诉ndk将jni代码编译生成动态库的一个编译脚本,基本上写jni代码是少不了一个Android.mk文件的

2、主要的android jni项目目录结构如下图所示

3、写一个最简单的Android.mk,如下图所示
#保存当前目录的宏
LOCAL_PATH := $(call my-dir)
#清除全局宏定义的值
include $(CLEAR_VARS)
#生成的库的名称
LOCAL_MODULE := othermodule
#库编译需要的源码文件和依赖库
LOCAL_SRC_FILES := lib/libothermodule-57.so
#告诉Ndk编译成动态库
include $(PREBUILT_SHARED_LIBRARY)

4、来一个复杂一点的
#保存当前目录的宏
LOCAL_PATH := $(call my-dir)
#清除全局宏定义的值
include $(CLEAR_VARS)
#生成的库的名称
LOCAL_MODULE := othermodule
#库编译需要的源码文件和依赖库
LOCAL_SRC_FILES := lib/libothermodule-57.so
#告诉Ndk编译成动态库
include $(PREBUILT_SHARED_LIBRARY)
#清除全局宏定义的值
include $(CLEAR_VARS)
#是否允许未定义的符号
LOCAL_ALLOW_UNDEFINED_SYMBOLS=false
#生成的库的名称
LOCAL_MODULE := jnidemo
#生成的库的所用的头文件所在的目录
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
#ndk编译c代码用到的一些宏定义
LOCAL_CFLAGS := -D_LINUX -D_ANDROID
#ndk编译c++代码用到的一些宏定义
LOCAL_CPPFLAGS := -D_LINUX -D_ANDROID
#ndk编译当前目录下所有的c文件
MY_C_LIST += $(wildcard $(LOCAL_PATH)/*.c)
#ndk编译当前目录下所有的c++文件
MY_CPP_LIST += $(wildcard $(LOCAL_PATH)/*.cpp)
#所有的c、c++文件
LOCAL_SRC_FILES := $(MY_C_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES += $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)
#依赖的第三方库
LOCAL_SHARED_LIBRARIES := othermodule
#依赖的系统库
LOCAL_LDLIBS := -landroid -pthread -llog -lz
#告诉Ndk编译成动态库
include $(BUILD_SHARED_LIBRARY)
#递归调用子目录的.mk
include $(call all-makefiles-under,$(LOCAL_PATH))
include $(call all-subdir-makefiles)
#用于在运行期检测目标设备的CPU家族和它支持的可选特性。
$(call import-module,cpufeatures)

5、、简单说明一下我的编译环境,主要是Ndk的c、c++编译环境的配置,我用的是MINGGW


