ndk 构建注意事项
1, Android.mk 和 Application.mk 的默认位置放在 jni,最还不要改这个位置不然很蛋疼
2, 生成一个静态库(.a)一定要在 Application.mk 中加入 APP_MODULES := libxxmod, 不然执行 ndk-build 没一点儿反应
3, LOCAL_C_INCLUDES 中的目录最好这样写 LOCAL_C_INCLUDES := $(LOCAL_PATH)/../xxlib/include, 不然不在 jni 目录下 启动 ndk-build,则找不到那些 .h
4, 为了支持 exceptions 和 rtti 特性 Application.mk 中要加入 APP_STL := gnustl_static 或者 APP_STL := gnustl_shared
5, 编译 Lua 5.2 需要定义宏 LOCAL_CFLAGS += -D"getlocaledecpoint()='.'" 不然 llex.c:214 会编译失败, 原因是 ndk 自带的 Bionic C 库 localeconv 函数返回的 struct lconv 是个空结构
6, 编译 Freetype 需要定义宏 LOCAL_CFLAGS += -DFT2_BUILD_LIBRARY, 不然不会 #include <freetype/internal/internal.h> 导致编译失败
7, 多个静态库链接成一个动态库时 LOCAL_STATIC_LIBRARIES 中的顺序和库之间的依赖顺序有关系, 不然会链接不成功, 而且在 include xx-prebuilt.mk 是不要用 $(LOCAL_PATH), 因为可能这个被修改, 导致莫名其名的找不到 .mk, 应该这样
CONST_PATH := $(call my-dir)
...
include $(BUILD_SHARED_LIBRARY)
...
include $(CONST_PATH)/../../xx/jni/xx-prebuilt.mk
include $(CONST_PATH)/../../yy/jni/yy-prebuilt.mk
ps: LOCAL_STATIC_LIBRARIES 中的顺序和那个和依赖关系有关系真心潜规则,还好折腾过程中想起以前写 gcc 原生 Makefile 也遇到此问题,估计习惯用 VS 的同学会抓狂的:-D, 但愿你能通过度娘或谷哥找到这篇文章少浪费你点儿青春, :-D。