1、前言

Android.mk用于向编译系统描述源文件和共享库,它实际上是编译系统解析一次或多次的微小GNU makefile片段。它的语法支持将源文件分组位模块,模块是静态库、共享库或独立的可执行文件。

2、简单示例

首先来看一个最简单的Android.mk的例子,如下所示:

# A simple Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES :=hello.c

LOCAL_MODULE :=helloworld

include $(BUILD_EXECUTABLE)

对该Android.mk文件进行解析,如下:

LOCAL_PATH := $(call my-dir)

每个Android.mk文件必须以定义LOCAL_PATH为开始,它用于在开发项目文件中查找源文件,而宏my-dir则由编译系统提供,返回包含Android.mk的目录路径。

include $(CLEAR_VARS)

CLEAR_VARS变量由编译系统提供,并指向一个特定的GNU Makefile,由它负责清理很多LOCAL_XXX的值,例如:LOCAL_MODULE、LOCAL_SRC_FILES等,但是不清理LOCAL_PATH,这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的,清理后才能避免相互影响。

LOCAL_SRC_FILES := hello.c

LOCAL_SRC_FILES变量必须包含将要打包成模块的C/C++源文件,不必列出头文件,编译系统会自动找出依赖的文件,缺省的C++源码的拓展名为.cpp,也可以通过LOCAL_CPP_EXTENSION进行修改。

LOCAL_MODULE := helloworld

LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块,名字必须唯一并且不包含空格,Build System会自动添加适当的前缀和后缀。

include $(BUILD_EXECUTABLE)

BUILD_EXECUTABLE是编译系统提供的一个变量,指向一个特定的GNU Makefile脚本,表示要编译成一个可执行的文件,如果想编译成动态库则可以用BUILD_SHARED_LIBRARY,如果想编译成静态库则可以用BUILD_STATIC_LIBRARY。

android.mk是在哪儿,Android.mk基础相关推荐

  1. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  2. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  3. android.mk ndk编译选项优化,Android NDK 编译脚本分析 之一

    版权信息:本文为本人原创,欢迎转载,但请著明出处,并保留本版权信息. Android NDK编译脚本编写起来还是是比较简单条理的,然而它的语法和传统的linux GNU Make编译脚本的编写似乎有很 ...

  4. android config.mk,android编译分析之10—config.mk

    config.mk可以说是android编译系统中关于配置环境的一个总的makefile,定义了编译环境的方方面面.执行完config.mk就完成了android编译系统的所有准备工作,即准备好了所有 ...

  5. Android 系统(181 )----Android中各类.mk文件的编写

    Android中各类.mk文件的编写 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_STATIC_JAVA_LIBRARIES := ...

  6. Android 编译过程介绍,Android.mk 和 Android.bp 分析, 在源码中编译 AndroidStudio 构建的 App

    目录 一.Android 编译 1. 编译流程 2. Soong 介绍 3. build.sh 二.Android.mk 解析 三.Android.bp 解析 1. 模块类型 2. 模块属性 四.An ...

  7. android.mk 添加v7_在Android上以命令行方式移植FFmpeg

    最近要做视频I帧提取和摘要生成的项目,在Android平台上的应用,经过调研,发现ffmpeg有很多相关功能的轮子,因此考虑将ffmpeg移植到Android平台.为了更好解耦和以及更多的文档参考,选 ...

  8. [Android] SQLite数据库之增删改查基础操作

        在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Un ...

  9. android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView.闲话休提,言归正转.让我们一起Talk Androi ...

  10. Android camera(4)---Android Camera开发之基础知识篇

    Android Camera开发之基础知识篇 转自:https://blog.csdn.net/feiduclear_up/article/details/51968975#jump5 概述 Andr ...

最新文章

  1. 蚂蚁金服面试经历-临场发挥
  2. 重庆市计算机二级考试大纲,重庆市二级计算机考试大纲.doc
  3. 遭遇一次MySQL猜解注入攻击
  4. asp.net web常用控件FileUpload(文件上传控件)
  5. html5(mp4)无法播放,HTML5的Video标签有部分MP4无法播放的问题解析(多图)
  6. SpringBoot 如何生成接口文档,老鸟们都这么玩的!
  7. Maven (1)---maven 基础知识
  8. spark学习-69-源代码:Endpoint模型介绍(1)
  9. [笔记一]Essential JavaScript Design Patterns For Beginners
  10. 开源三维地球Cesium中如何离线加载卫星影像和高程DEM数据
  11. Windows操作系统----安全机制----Token
  12. Android按键音
  13. 如何获客:3招做好触客营销实现高效获
  14. 以自己的电脑作为服务器,搭建网站,外网可访问
  15. python跳一跳脚本详解_跳一跳 python脚本 改进版
  16. opencv+dlib实现给蒙娜丽莎“配”眼镜
  17. AMOS分析技术:模型整体拟合度指标
  18. D 创始人及员工,被批捕!这和 B站有啥关系?
  19. 云计算——详细思维导图
  20. django图书管理系统:

热门文章

  1. oracle xe快捷版本介绍
  2. C语言 sizeof操作符详解
  3. Pycharm批量修改变量名
  4. 强强联手 华云数据与南湖实验室签署战略合作协议
  5. 虚拟机中Operating System not found 解决方法
  6. python世界杯无风险套利
  7. Transformer前言:self-attention与Multi-Headed Attention的详细理解
  8. 网络协议之:WebSocket的消息格式
  9. Oxford-Man Institute:十月论文推荐
  10. outstanding and out-of-order