Android(安卓)NDK开发,Android.mk构建基础
关于Android.mk
Android.mk是一个向Android NDK构建系统描述NDK项目的GUN Makefile片段。它是每一个NDK项目的必备组件,构建系统希望它出现在jni子目录中。 Android.mk是Android提供的用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握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)开始,以定义编译类型结束。例如:
[html] view plain copy
- LOCAL_PATH:=$(callmy-dir)
- include$(CLEAR_VARS)
- LOCAL_MODULE:=fuck_static
- #fuck_static的源文件定义
- include$(BUILD_STATIC_LIBRARY)
- include$(CLEAR_VARS)
- LOCAL_MODULE:=fuck_shared_1
- #fuck_shared_1的源文件定义
- LOCAL_STATIC_LIBRARIES:=fuck_static
- include$(BUILD_SHARED_LIBRARY)
- include$(CLEAR_VARS)
- LOCAL_MODULE:=fuck_shared_2
- #fuck_shared_2的源文件定义
- include$(BUILD_SHARED_LIBRARY)
注意,如果在共享库中使用LOCAL_STATIC_LIBRARIES引用静态库,那么这个静态库将被静态地添加到该共享库中,这种方式代码运行效率是最高的,但是同时会增加该共享库的体积。如果某个静态库被多个共享库同时引用n次,静态库的n个副本将被添加到这些共享库中,这样会显著增加C/C++库集合的体积。
这样的话,就需要将这个静态库编译成共享库,通过动态链接的方式供其他共享库使用(这样就不会产生相同C/C++库的多个副本)。
例如:
[html] view plain copy
- LOCAL_PATH:=$(callmy-dir)
- include$(CLEAR_VARS)
- LOCAL_MODULE:=fuck_shared
- #fuck_shared的源文件定义
- include$(BUILD_SHARED_LIBRARY)
- include$(CLEAR_VARS)
- LOCAL_MODULE:=fuck_shared_1
- #fuck_shared_1的源文件定义
- LOCAL_SHARED_LIBRARIES:=fuck_shared
- include$(BUILD_SHARED_LIBRARY)
声明
欢迎转载,但请保留文章原始出处
作者:Jaiky_杰哥
出处:http://blog.csdn.net/jaikydota163/article/details/52098887
更多相关文章
- Android开发——Android搜索框架(二)
- APP开发实战94-Vector静态图的使用
- Android(安卓)Studio & ADT 快捷键配置文件所在目录,自定义后可导
- Android架构分析之使用自定义硬件抽象层(HAL)模块
- android 自定义view
- 在android中policymanager
- android listview custom style 自定义样式
- android实践项目一实现简单的验证码和spinner下拉选项效果
- 【Android】使用LiveData KTX Builder让代码更简洁