一 、概念
用到jni的时候,就需要android.mk文件,它通常位于project/jni/android.mk。anddroid.mk是用来想Android NDK描述C/C++源码,它把源码分成模块(module)编译,编译的结果是动态库、静态库或可执行文件。只有动态库可以打包到应用中。静态库可以应用到动态库中。
二、简单例子
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= helloworld
LOCAL_SRC_FILES := helloworld.c
include $(BUILD_SHARED_LIBRARY)
第一行:LOCAL_PATH := $(call my-dir)
定义源码的路径。my-dir是一个宏函数,调用语法就是$(call <function>) function 是NDK提供的宏函数。更多宏函数参考developer的文档。
第二行:include $(CLEAR_VARS)
清除LOCAL变量,除了LOCAL_PATH。CLEAR_VARS是一个NDK定义的变量,它指向一个清除LOCAL变量的脚本。调用语法是include $(<variable>)。更多的NDK定义的变量参考developer文档。
第三行:LOCAL_MODULE:= helloworld
标识你定义的模块(module)。如上面的例子,它将会生成一个libhelloworld.so的动态库。LOCAL开通的一般都是描述模块的变量,在include $(CLEAR_VARS)之后所有LOCAL变量被重新初始化,之后才能对LOCAL变量进行赋值。更多LOCAL变量参考developer文档。
第四行:LOCAL_SRC_FILES := helloworld.c
定义源文件。多个文件用空格分离。文件路径是相对LOCAL_PATH的。
第五行:include $(BUILD_SHARED_LIBRARY)
编译成动态库。