Android.mk 相当于 Linux 中的 Makefile 文件,用来向安卓系统描述如何编译源代码。该文件会被编译器解析多次,所以尽量减少在 Android.mk 中声明变量。

Android.mk 文件可以将源码打包成模块,模块可以是apk、jar包、c/c++应用程序、静态库(.a文件)和动态库(.so)。

动态库可以被移到应用程序包(apk),静态库可以被链接入动态库。

Android.mk 中可以定义一个或者多个模块,一个源文件也可以打包进多个模块。

 # Copyright  The Android Open Source Project

 LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) LOCAL_SRC_FILES:= \
rild.c LOCAL_SHARED_LIBRARIES := \
liblog \
libcutils \
libril \
libdl # temporary hack for broken vendor rils
LOCAL_WHOLE_STATIC_LIBRARIES := \
librilutils_static LOCAL_CFLAGS := -DRIL_SHLIB ifeq ($(SIM_COUNT), )
LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2
endif LOCAL_MODULE:= rild
LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE)

在 Android.mk 中,注释以 # 开头,注释此行。

LOCAL_PATH:= $(call my-dir)

指定当前模块的目录。

include $(CLEAR_VARS)

清除 LOCAL_PATH 以外的所有 LOCAL_xxx 变量。

LOCAL_SRC_FILES:= \

  rild.c

需要编译的源代码文件。

LOCAL_SHARED_LIBRARIES := \
  liblog \
  libcutils \
  libril \
  libdl

模块运行时需要依赖的动态库。

LOCAL_WHOLE_STATIC_LIBRARIES := \
  librilutils_static

静态库全链接。

LOCAL_CFLAGS := -DRIL_SHLIB

可选的,用来在编译c/c++时附加编译选项。

ifeq ($(SIM_COUNT), 2)
  LOCAL_CFLAGS += -DANDROID_SIM_COUNT_2
endif

条件编译,ifeq判断相等。

LOCAL_MODULE:= rild

生成的模块名称,要唯一并且不含空格,系统会自动添加前缀和后缀。

若生成动态库,则生成 librild.so;若名称为 librild,则不会添加前缀,依然是 librild.so。

LOCAL_MODULE_TAGS := optional

该模块在所以版本下都编译。(user版本、eng版本、optional所有版本)

include $(BUILD_EXECUTABLE)

指定编译方法。

BUILD_STATIC_LIBRARY:编译为静态库

BUILD_SHARED_LIBRARY:编译为动态库

BUILD_EXECUTABLE:编译为C可执行程序

BUILD_JAVA_LIBRARY:编译为Java类库

BUILD_PACKAGE:编译为Android应用程序包

LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw

指定目标文件最终安装位置——out/target/product/rk3288/system/lib/hw

主要编译变量
编译变量 功能
LOCAL_PATH 指定编译路径
LOCAL_MODULE 指定编译模块名
LOCAL_SRC_FILES 指定编译源码列表
LOCAL_SHARED_LIBRARIES 指定使用的c/c++共享库列表
LOCAL_STATIC_LIBRARIES 指定使用的c/c++静态库列表
LOCAL_STATIC_JAVA_LIBRARIES 指定使用的Java库列表
LOCAL_CFLAGS 指定编译器参数
LOCAL_C_INCLUDES 指定c/c++头文件路径
LOCAL_PACKAGE_NAME 指定Android应用程序名
LOCAL_CERTIFICATE 指定签名认证
LOCAL_JAVA_LIBRARIES 指定使用的Java库列表
LOCAL_SDK_VERSION 指定编译Android应用程序时的SDK版本

Android.mk语法解析的更多相关文章

  1. Android.mk文件解析

     一.一个简单的Android.mk文件例如以下: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := nativ ...

  2. Android.mk语法说明

    版权申明: 本文原创首发于以下网站,您可以自由转载,但必须加入完整的版权声明 博客园:https://www.cnblogs.com/MogooStudio/ csdn博客:https://blog. ...

  3. Android JSON语法解析示例

    参考: http://www.open-open.com/lib/view/open1326376799874.html https://www.cnblogs.com/jycboy/p/json_x ...

  4. Android.mk 文件语法详解

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  5. Android.mk 文件语法详解 转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  6. Android.mk文件语法规范 原文

    序言:------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件.为了明白下面的内容,你必须已经阅读 ...

  7. Android JNI的Android.mk文件语法详解

    Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解 ...

  8. Android.mk相关知识

    Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.要掌握jni,就必须熟练掌握Andr ...

  9. Android.mk详解

    Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.要掌握jni,就必须熟练掌握Andr ...

随机推荐

  1. IOS UI-控制器的创建和控制器的View的创建

    一.控制器的创建和控制器的View的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在 ...

  2. vue打包体积优化之旅

    webpack 与 vue 在使用vue开发时,遇到打包后单个文件太大,因而需要分包,不然加载时间太久.虽然尽可能减少请求次数,但是单个包太大也不是好事 思路 组件按需加载 vue-router 的懒 ...

  3. python面试题包含基础和Linux操作以及数据库相关

    今天面试了一家公司,感觉表现的不是很好,记录一下面试的试题. python基础部分 python 是一门什么样的语言面向对象的语言有那些,python的面向对象和Java面向对象的区别 Python是 ...

  4. laravel中新建文件并保存数据到文件中

    //base_path()获取当前的绝对路径 $path=base_path().'\config\web.php'; $str='abcdefg'; //要声明的字符串 file_put_conte ...

  5. Idea_02_常用配置

    一.前言 在上一节,我们安装并激活了IDEA,这一节我们来设置下Idea的常用配置: 项目相关配置 Idea常用配置 二.项目相关配置 运行Idea,出现下图 1.配置默认JDK 1.1 添加 SDK ...

  6. Django中间件(勾子函数)使用

    中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django ...

  7. .net 获取客户端Ip地址

    Request.ServerVariables["REMOTE_ADDR"]来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正 ...

  8. Shell 命令行,实现对若干网站状态批量查询是否正常的脚本

    Shell 命令行,实现对若干网站状态批量查询是否正常的脚本 如果你有比较多的网站,这些网站的运行状态是否正常则是一件需要关心的事情.但是逐一打开检查那简直是一件太糟心的事情了.所以,我想写一个 sh ...

  9. JDK 1.8之 HashMap 源码分析

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/75579654 构造函数 Node hash put treeifyBin get re ...

  10. 怎么样在python 3.6里安装tensorflow?

    首先要下载python3.6: https://www.python.org/downloads/release/python-361/ 接着下载: numpy-1.13.0-cp36-none-wi ...