关于Android.mk
Android.mk构建说明
Android.mk必须以 LOCAL_PATH开头(注释#除外)
LOCAL_PATH := $(call my-dir)
必须借助CLERA_VARS变量清除除LOCAL_PATH外的所有LOCAL_<name>变量,以免冲突
include $(CLEAR_VARS)
必须定义LOCAL_MODULE变量,该变量用于定义该模块的唯一名称。例如,
LOCAL_MODULE := fuck
这样,编出的C/C++模块文件名将是libfuck.so
通过LOCAL_SRC_FILES变量设置源文件列表,多文件用“\”隔开,例如
LOCAL_SRC_FILES := aaa.cpp \
bbb.cpp \
ccc.cpp
注意,最后一个源文件结尾不加“\”
必须在文件结尾定义编译类型
我们可以将我们的NDK模块编译成:
BUILD_SHARED_LIBRARY 共享库,供java或者其他共享库调用
BUILD_STATIC_LIBRARY 静态库,供共享库调用,不能直接被java调用。例如我们先构建一个静态库 LOCAL_MODULE := fuck_static,那么我们可以在构建共享库的时候加入 LOCAL_STATIC_LIBRARIES := fuck_static (写在LOCAL_SRC_FILES之后)来引用这个静态库。
还有其他编译类型,再次不一一列举!
我们可以在一个Android.mk文件里面定义多个相同或者不同类型的库,这些库定义以Include $(CLEAR_VARS)开始,以定义编译类型结束。例如:
注意,如果在共享库中使用LOCAL_STATIC_LIBRARIES引用静态库,那么这个静态库将被静态地添加到该共享库中,这种方式代码运行效率是最高的,但是同时会增加该共享库的体积。如果某个静态库被多个共享库同时引用n次,静态库的n个副本将被添加到这些共享库中,这样会显著增加C/C++库集合的体积。
这样的话,就需要将这个静态库编译成共享库,通过动态链接的方式供其他共享库使用(这样就不会产生相同C/C++库的多个副本)。
例如: