Win7 x64
jdk1.8.0_11
adt-bundle-windows-x86_64-20140702
android-ndk-r10
LOCAL_PATH := $(call my-dir)1、解释 LOCAL_PATH:英文:如下图中文:Android.mk 开始必须定义变量 LOCAL_PATH,它用来指定源文件的位置2、解释 my-dir:英文:如下图中文:编译系统提供的'my-dir'宏函数,被用来获取当前的目录。
include $(CLEAR_VARS)1、解释 CLEAR_VARS:英文:如下图中文:编译系统提供CLEAR_VARS变量,它指向了一个用来清除 LOCAL_ 开头的变量(LOCAL_PATH除外)的makefile文件,需要它的原因是整个的编译上下文中,所有的变量都是全局的,这样就可以保证这些变量只在局部范围内起作用;
LOCAL_MODULE := hello-jni1、解释 LOCAL_MODULE:英文:如下图中文:每一个android.mk文件中都必须定义一个模块标示 LOCAL_MODULE , 这个名字必须是唯一的并且不包含任何的空格,编译系统将自动的修改生成文件的前缀和后缀,如一个模块为'foo'共享库将被改为'libfoo.so'; 重要提示,如果你的模块名为'libfoo',编译系统生成的文件为 'libfoo.so', 而不会去再增加前缀,当你使用的时候,android平台会自动识别;
LOCAL_SRC_FILES := hello-jni.c1、解释 LOCAL_SRC_FILES英文:如下图中文:LOCAL_SRC_FILES必须包含一系列的C/C++源文件,他们将会被建立和装载到模块中,注意你不应该把需要包含的头文件列在这里,因为建立系统将自动计算依赖项,只有源文件才能够被编译器识别;2、解释 LOCAL_CPP_EXTENSION英文:如下图 中文:注意默认的c++文件扩展名是'.cpp', LOCAL_CPP_EXTENSION可以用来指定不同类型的扩展名,不要忘了前面的点(如:'.cxx' 将起作用, 但是 'cxx'不会起作用).如:LOCAL_CPP_EXTENSION := .cc .cpp
include $(BUILD_SHARED_LIBRARY)1、解释 BUILD_SHARED_LIBRARY英文:如下图中文:‘建立系统’提供个变量 BUILD_SHARED_LIBRARY, 将根据在‘include’之前定义的所有的信息和LOCAL_前缀的变量,决定将建立什么,如何正确的生成共享库;2、解释 BUILD_STATIC_LIBRARY英文: 如下图中文: 同上,只不过它生成的是静态库
LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/third_party/freetype 1、解释 NDK_ROOT中文:NDK_ROOT 代表的是ndk的根目录,如我的是“D:\Android\android-ndk-r10”,这个例子是用来加载ndk根目录下的freetype的头文件路径;
LOCAL_LDFLAGS := \ $(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libfreetype.a1、解释 LOCAL_LDFLAGS中文:用来加载用户自己的静态库(.a文件)2、解释 TARGET_ARCH_ABI中文:当前的cpu/abi的类型,在链接不同类型的CPU_ABI时非常有用,如下图
$(call import-add-path,$(LOCAL_PATH)/libsrc)1、解释:import-add-path中文:增加自己的路径到 NDK_MODULE_PATH 环境变量中,再非ndk根目录/sources下编译时会用到
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp$(error $(LOCAL_SRC_FILES))1、解释:$中文:变量前面加上'$'用来返回变量的值2、解释:$(error string)中文:用来将string所对应的内容打印到控制台,并且android.mk文件停止继续进行编译,如下图
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp$(warning $(LOCAL_SRC_FILES))1、解释:$(warning string)中文:用来将string所对应的内容打印到控制台,并且android.mk文件将继续进行编译,如下图
LOCAL_PRELINK_MODULE := false 1、解释 LOCAL_PRELINK_MODULE:中文:关闭编译器链接前进行代码优化,防止将没有用到的代码不添加到生成的库中
LOCAL_EXPORT_CFLAGS := -DFOO=11、解释 LOCAL_EXPORT_CFLAGS定义这个变量来记录一些列的 c/c++编译标志,他们将会增加到其他的使用这个模块的LOCAL_CFLAGS中,LOCAL_CFLAGS的功能相当于:LOCAL_STATIC_LIBRARIES 和 LOCAL_SHARED_LIBRARIES 这两个变量;
LOCAL_STATIC_LIBRARIES := foo1、解释 LOCAL_STATIC_LIBRARIES链接进来一个静态库的模块,这里是静态库的模块的名称,而不是静态库的名称
LOCAL_SHARED_LIBRARIES链接进来一个动态库的模块,这里是动态库的模块的名称,而不是静态库的名称
LOCAL_EXPORT_CPPFLAGS跟 LOCAL_EXPORT_CFLAGS 的功能一样,但是它只能够在c++中使用
LOCAL_EXPORT_C_INCLUDES跟 LOCAL_EXPORT_CFLAGS,但是对于c的 include路径,被调用模块申明后,使用模块可以很方便的使用包含的路径
LOCAL_EXPORT_LDFLAGS跟LOCAL_EXPORT_CFLAGS的作用一样,但是仅仅是链接选项
LOCAL_EXPORT_LDLIBS跟LOCAL_EXPORT_CFLAGS的作用类似,但是这个变量说明的系统库,需要带上 '-l' 前缀,他们将导入链接器选项,并追加到你的模块的 LOCAL_LDLIBS
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true允许未定义的符号
LOCAL_CFLAGS.c文件对应的编译标记变量
LOCAL_LDLIBS用来链接共享库(so)或者执行文件,使用系统的库文件的时候,需要加上前缀 '-l',例如下面的例子,将告诉连接器生成的模块的时候同时链接 /system/lib/libz.soLOCAL_LDLIBS := -lz注意:如果你在一个模块中链接一个静态库,这个静态库是不会起作用的,同时ndk-build 会打印出一条警告消息
LOCAL_CFLAGS := -fvisibility=hidden隐藏库函数名
LOCAL_PROGUARD_ENABLED默认是打开的,不特别指定的话,就是起作用的,就可能做优化。LOCAL_PROGUARD_ENABLED:= disabled