通过分析一个例子来了解NDK makefile文件的生成。例子"hello JNI" ,由NDK提供的例子
A. 目录结构
jni目录:包含本地源文件,eg:'jni/hello-jni.c',该源文件实现了一个简单的共享库,实现了一个简单的本地方法,返回字符串给java 虚拟机
src目录:包含了工程的java源文件
B. mk源文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY)
第一行:
LOCAL_PATH := $(call my-dir)
必须的,调用系统方法,返回当前程序的目录
第二行:
include $(CLEAR_VARS)
必须得,该CLEAR_VARS变量由编译系统提供,指向一些特殊的GNU Makefile文件来清除一些LOCAL_XXX变量除了
LOCAL_PATH。因为所有的编译控制文件被一个单一的GUN Make执行时所有的变量时全局的。
第三行:
LOCAL_MODULE := hello-jni
用来指定你生成的动态库的名字,系统会自动为你添加前缀和后缀,生成后的so为 libhello-jni.so,系统自动添加了前缀“lib”和后缀“.so”
第四行:
LOCAL_SRC_FILES := hello-jni.c
其包含一系列的C or C++源文件,不需要添加.h文件,系统会自动为你添加
第五行:
include $(BUILD_SHARED_LIBRARY)
必须的,其由系统提供,指向一个GUN Makefile脚本,用来负责收集你定义的所有LOCAL_XXX变量,并确定该怎么构建,以及怎样做准确,同时也指定生成一个共享库