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)#递归调用子目录的.mkinclude $(call all-makefiles-under,$(LOCAL_PATH))include $(call all-subdir-makefiles)#用于在运行期检测目标设备的CPU家族和它支持的可选特性。$(call import-module,cpufeatures)
5、、简单说明一下我的编译环境,主要是Ndk的c、c++编译环境的配置,我用的是MINGGW