关于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
  1. LOCAL_PATH:=$(callmy-dir)
  2. include$(CLEAR_VARS)
  3. LOCAL_MODULE:=fuck_static
  4. #fuck_static的源文件定义
  5. include$(BUILD_STATIC_LIBRARY)
  6. include$(CLEAR_VARS)
  7. LOCAL_MODULE:=fuck_shared_1
  8. #fuck_shared_1的源文件定义
  9. LOCAL_STATIC_LIBRARIES:=fuck_static
  10. include$(BUILD_SHARED_LIBRARY)
  11. include$(CLEAR_VARS)
  12. LOCAL_MODULE:=fuck_shared_2
  13. #fuck_shared_2的源文件定义
  14. include$(BUILD_SHARED_LIBRARY)


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

[html] view plain copy
  1. LOCAL_PATH:=$(callmy-dir)
  2. include$(CLEAR_VARS)
  3. LOCAL_MODULE:=fuck_shared
  4. #fuck_shared的源文件定义
  5. include$(BUILD_SHARED_LIBRARY)
  6. include$(CLEAR_VARS)
  7. LOCAL_MODULE:=fuck_shared_1
  8. #fuck_shared_1的源文件定义
  9. LOCAL_SHARED_LIBRARIES:=fuck_shared
  10. include$(BUILD_SHARED_LIBRARY)


声明

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

更多相关文章

  1. Android开发——Android搜索框架(二)
  2. APP开发实战94-Vector静态图的使用
  3. Android(安卓)Studio & ADT 快捷键配置文件所在目录,自定义后可导
  4. Android架构分析之使用自定义硬件抽象层(HAL)模块
  5. android 自定义view
  6. 在android中policymanager
  7. android listview custom style 自定义样式
  8. android实践项目一实现简单的验证码和spinner下拉选项效果
  9. 【Android】使用LiveData KTX Builder让代码更简洁

随机推荐

  1. 看动画轻松理解「链表」实现「LRU缓存淘
  2. 我用python掐指一算,2020高考分数和录取情
  3. 一道腾讯面试题:厉害了我的杯
  4. 嘿,你知道新冠疫情现在什么样了吗?
  5. C#基础入门第十四天(MD5加密,WinForm)
  6. 啥是佩奇排名算法
  7. Python与Tableau相结合,万字长文搞定传统
  8. 图解LeetCode第 279 号问题: 完全平方数
  9. Android(安卓)- 引用计数(sp、wp、Refbase
  10. 时间序列&日期学习笔记大全(上)