Android NDK开发,Android.mk构建基础

来源:互联网 发布:淘宝哪个店有原味丝袜 编辑:程序博客网 时间:2024/06/05 16:38

关于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
 在CODE上查看代码片派生到我的代码片
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4. LOCAL_MODULE    :fuck_static  
  5. #fuck_static的源文件定义  
  6. include $(BUILD_STATIC_LIBRARY)  
  7.   
  8. include $(CLEAR_VARS)  
  9. LOCAL_MODULE    :fuck_shared_1  
  10. #fuck_shared_1的源文件定义  
  11. LOCAL_STATIC_LIBRARIES :fuck_static  
  12. include $(BUILD_SHARED_LIBRARY)  
  13.   
  14. include $(CLEAR_VARS)  
  15. LOCAL_MODULE    :fuck_shared_2  
  16. #fuck_shared_2的源文件定义  
  17. include $(BUILD_SHARED_LIBRARY)  


注意,如果在共享库中使用LOCAL_STATIC_LIBRARIES引用静态库,那么这个静态库将被静态地添加到该共享库中,这种方式代码运行效率是最高的,但是同时会增加该共享库的体积。如果某个静态库被多个共享库同时引用n次,静态库的n个副本将被添加到这些共享库中,这样会显著增加C/C++库集合的体积。
这样的话,就需要将这个静态库编译成共享库,通过动态链接的方式供其他共享库使用(这样就不会产生相同C/C++库的多个副本)。
例如:

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4. LOCAL_MODULE    :fuck_shared  
  5. #fuck_shared的源文件定义  
  6. include $(BUILD_SHARED_LIBRARY)  
  7.   
  8. include $(CLEAR_VARS)  
  9. LOCAL_MODULE    :fuck_shared_1  
  10. #fuck_shared_1的源文件定义  
  11. LOCAL_SHARED_LIBRARIES :fuck_shared  
  12. include $(BUILD_SHARED_LIBRARY)  


声明

欢迎转载,但请保留文章原始出处
作者:Jaiky_杰哥 
出处:http://blog.csdn.net/jaikydota163/article/details/52098887

4 1
原创粉丝点击