Android.mk用法详解

Android.mk是Android提供的一个makefile文件,可以将源文件分组为模块。用来引用的头文件目录、需要编译的*.c/.cpp文件、jni源文件、指定编译生成.so共享库文件或者*.a静态库文件,可以定义一个或多个模块,也可以多个模块中使用同一个源文件;

Android.mk文档:

  1. Android.mk的官方文档:https://developer.android.google.cn/ndk/guides/android_mk
  2. 在NDK中的文档路径:ndk目录下docs中的ANDROID-MK.html文档,eg:android-ndk-r9d/docs/ANDROID-MK.html;

基础知识:
1.LOCAL_PATH := $(call my-dir)
每个Android.mk文件都以LOCAL_PATH开始,Build System提供的宏函数 my-dir,此变量返回包含的makefile的路径;CLEAR_VARS不会清楚LOCAL_PATH变量;

NDK提供的宏函数;
2. include $(CLEAR_VARS):
CLEAR_VARS变量由Build System提供,并指向一个特定的GNU Makefile,可为你清除LOCAL_xxx变量,但不会清除LOCAL_PATH变量;
因系统在单一GNU Make执行环境中解析所有构建控制文件,LOCAL_xxx变量是全局的,所以描述每个模块之前,声明此变量,可以清除所有了LOCAL_xxx,这样清理后避免相互影响;

3.LOCAL_MODULE
此变量声明模块名称,名称必须唯一且不含任何空格;
Build System在生成最终共享库文件时,会将"lib"作为前缀+模块名称+".so"作为共享库文件名称;
eg:LOCAL_MODULE := ffmpeg-decoder
模块名称为ffmpeg-decoder生成共享库为libffmpeg-decoder.so;
4. LOCAL_SRC_FILES := FFmpegDecoder.cpp FFmpegConfigure.cpp
此变量必须包含要构建到模块中的C/C++源文件列表,不需要列出头文件和包含文件,系统会自动导入依赖;
eg: LOCAL_SRC_FILES := FFmpegDecoder.cpp FFmpegConfigure.cpp
5. LOCAL_C_INCLUDES
变量设置头文件的include目录列表;
eg: LOCAL_C_INCLUDES += (LOCALPATH)/include6.LOCALLDLIBS此变量包含构建共享库或可执行文件时链接库,使用−l前缀传递特定系统库的名称,多个链接库之间使用空格作为分隔符;NDK为Android版本提供新的头文件和库,文件路径:(LOCAL_PATH)/include 6. LOCAL_LDLIBS 此变量包含构建共享库或可执行文件时链接库,使用-l前缀传递特定系统库的名称,多个链接库之间使用空格作为分隔符; NDK为Android版本提供新的头文件和库,文件路径:(LOCALPATH)/include6.LOCALLDLIBS使l使NDKAndroidNDK/platforms/android-//usr/include下;
-llog链接到系统的liblog.so文件,应用可以定义从原生代码向内核发送日志消息,路径:/system/lib/liblog.so,其实是导入<android/log.h>头文件,路径:$NDK/platforms/android-3/arch-arm/usr/include/android/log.h

变量列表:
-llog(日志库):导入log.h头文件
-lz(ZLib压缩库):添加zlib.h和zconf.h头文件;
-ldl(动态链接器库):添加dlfcn.h头文件,可以访问Android动态链接器的dlopen()、dlsym()和dlclose()函数;
-lGLESv3(OpenGL ES3.1库):此变量API 21开始,添加gl31.h和gl3ext.h头文件,提供了渲染机制,参考EGL原生平台接口;从API 9开始提供EGL API,可以使用GLSurfaceView;
-ljnigraphics:允许C/C++以可靠方式访问Java位图对象的像素缓冲区,导入bitmap.h头文件,jnigraphics工作流程参考:NDK API中的jnigraphics;
-lOpenMAXAL(多媒体库):导入OMXAL/OpenMAXAL.h和OMXAL/OpenMAXAL_Platform.h头文件,提供原生多媒体处理库;
-landroid(android原生头文件库): 原生头文件列表包括native_activity.h、looper.h、input.h、keycodes.h等等,如需了解头文件详情参考:NDK API参考文档;
https://developer.android.google.cn/ndk/guides/stable_apis
eg:LOCAL_LDLIBS := -llog -lz
7. LOCAL_SHARED_LIBRARIES := avcodec avdevice
此变量是此模块运行中依赖的共享库模块列表,avcodec和avdevice都是前面定义的共享模块库;
eg:
8. include $(BUILD_SHARED_LIBRARY)
此变量设置Build System提供的变量执行GNU Makefile脚本,表示指定模块的生成方式;
BUILD_SHARED_LIBARAY:编译为动态库;
BUILD_SHARED_LIBRARY:编译为动态库(.so),这里的LOCAL_SRC_FILES的值为.c/.cpp;
BUILD_STATIC_LIBRARY:编译为静态库(
.a),这里的LOCAL_SRC_FILES的值为*.c/.cpp;
BUILD_EXECUTABLE:编译为Native C可执行程序;
PREBUILT_SHARED_LIBRARY:编译为动态库(
.so),与BUILD_SHARED_LIBRARY不同,这里LOCAL_SRC_FILES的值不能是源文件,而是库文件;
PREBUILD_STATIC_LIBRARY:编译静态库;
9:TARGET_PLATFORM、TARGET_ARCH_ABI和TARGET_ABI
TARGET_PLATFORM:构建系统目标的Android API level;
eg:TARGET_PLATFORM := android-22
TARGET_ARCH_ABI :此变量将CPU和架构的ABI存储到目标;eg:TARGET_ARCH_ABI := arm64-v8a
TARGET_ABI:设置Android API level和ABI的联结;
eg:TARGET_ABI := android-22-arm64-v8a

注:Android.mk中的TARGET_xxx与Application.mk中的APP_xxx中的变量设置相似;

  1. LOCAL_MODULE_FILENAME
    模块只设置LOCAL_MODULE而不设置LOCAL_MODULE_FILENAME,就会以“lib”前缀+module名称+“.so”命名生成的动态库名称,如果我们需要自己设置生成动态库名称就可以通过LOCAL_MODULE_FILENAME进行设置;
  2. LOCAL_CPP_EXTENSION
    此变量设置C++源文件以外的文件扩展名;
    eg:LOCAL_CPP_EXTENSION := .cxx .cpp .cc .c
    12.LOCAL_CPP_FEATURES
    此变量指明代码依赖于特定的C++功能;
    eg:LOCAL_CPP_FEATURES := rtti exceptions features
    rtti:指明使用RTTI(运行时类型信息);
    exceptions:指明代码使用C++异常;
  3. LOCAL_C_INCLUDES
    此变量指定相对于NDK root目录的路径列表,在编译所有源文件(C、C++和Assembly)时添加到include搜索路径;
  4. LOCAL_ARM_MODE
    此变量指定生成ARM目标二进制文件;
  5. LOCAL_ARM_NEON
    此变量设置支持NEON,
    eg: LOCAL_ARM_NEON := true
  6. LOCAL_THIN_ARCHIVE
    此变量设置为true,构建静态库时生成一个只包含实际对象的文件路径而不包含对象的库,好处是库文件变小了,但是不能进行移植,因为所有的路径是相对路径.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整顿满月,如今现金贷生不如死

去年现金贷平台野蛮生长&#xff0c;现金贷业务高歌猛进&#xff0c;各种现金贷平台如雨后春笋般出现&#xff0c;但是由于准入门槛低&#xff0c;相关监管政策缺位等原因&#xff0c;现金贷业务也带来了很大的社会影响&#xff0c;最典型的是高息放款&#xff0c;不当催收&…

Application.mk用法详解

Application.mk文件定义要编译的多个变量的GNU Makefile片段,位于PROJECT/jni/目录下,PROJECT/jni/目录下,PROJECT/jni/目录下,PROJECT是项目目录&#xff0c;另一种方式放到NDK/apps/目录的子目录下&#xff08;NDK/apps/目录的子目录下&#xff08;NDK/apps/目录的子目录下&a…

2017年度总结:迷茫。

-1-如果用一个字&#xff08;词&#xff09;来总结2017&#xff0c;你会用什么呢&#xff1f;我的答案是&#xff1a;迷茫。20多岁&#xff0c;正是心比天高的年龄&#xff0c;四年大学生活转眼即逝&#xff0c;站在人生的十字路口&#xff0c;对未知的恐惧再次让我陷入迷茫当中…

2018年去贷款,是否可以不用找信贷经理帮忙?

去贷款或许你可能说&#xff0c;市场上贷款机构那么多&#xff0c;贷款产品那么多&#xff0c;为何要找信贷经理&#xff1f;随便去一家贷款机构申请不就行了。但是有一个专业的信贷经理帮你办理跟没有专业的信贷经理指导&#xff0c;贷款真的有很大的区别&#xff0c;甚至专业…

Glitch Free时钟切换技术

Glitch Free时钟切换技术 两个时钟切换电路。Glitch Free为无毛刺切换电路。 第一种时两个时钟源的频率呈倍数关系,第二种是两个时钟源完全没有关系,异步时钟。 下面是使用AND-OR型多路复用器逻辑进行简单的时钟切换。 下图针对的是两个时钟源频率成倍数关系。在每个时钟…

Heap与Stack的区别- -

一、预备知识—程序的内存分配 一个由c/C编译的程序占用的内存分为以下几个部分 1、栈区&#xff08;stack&#xff09;— 由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区&#xff08;heap&#xff…

稀疏傅里叶变换(sparse FFT)

作者&#xff1a;桂。 时间&#xff1a;2018-01-06 14:00:25 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/8214122.html 前言 对于数字接收来讲&#xff0c;射频域随着带宽的增加&#xff0c;AD、微波、FPGA资源的需求越来越高&#xff0c;但频域开的越宽并不意味着…

截图小妙招

截图小妙招 第一步&#xff1a;先右键&#xff0c;建立一个文本 第二步&#xff1a;修改名称和后缀&#xff08;截图.bat&#xff09; 第三步&#xff1a;右击 选择编辑&#xff0c;输入start snippingtool 保存。 第四步&#xff1a;双击&#xff0c;选择模式下的矩形就可…

马云最怕的事还是来了,央行对借呗动真格!

借呗已经推出深受大欢迎&#xff0c;截止2017年3月&#xff0c;借呗已经向1200万用户借款&#xff0c;累计放款3000亿&#xff0c;估计到了2017年底&#xff0c;借呗的放款额度很有可能超过5000亿元。借呗火爆&#xff0c;马云也是赚的盘满钵满&#xff0c;数据显示&#xff0c…

pthread 线程退出时自动释放资源

线程退出时自动释放资源 今天碰到一个问题:主线程pthread_create一个子线程A,子线程pthread_mutex_lock,然后调用其他的函数fun,最后从fun返回后再pthread_mutex_unlock. 但是如果在fun中调用了pthread_exit异常退出,那么岂不是没释放锁就退出了,这肯定会引起死锁. 解决办法一…

逃离迷茫和枯燥,让自己快乐起来

-1-2017年末&#xff0c;佛系青年一词刷爆朋友圈&#xff0c;它跟宗教没有任何关系&#xff0c;代表一种怎么都行、不大走心、看淡一切的活法。佛系青年最喜欢的三个词就是就是&#xff1a;可以&#xff0c;都行&#xff0c;没关系。佛系青年口头禅快节奏的社会&#xff0c;压力…

电脑小技巧

电脑小技巧 第一个&#xff1a;修复旧电脑 winR&#xff08;注意勾选管理权限创建此任务&#xff09;然后输入cmd 输入chkdsk&#xff0c;然后回车 然后输入sfc/scannow&#xff0c;回车 在winr&#xff0c;然后输入%temp%,全选删除。 截图 windowshifts:任意截图。…

工程应用中的自相关操作

作者&#xff1a;桂。 时间&#xff1a;2018-01-10 18:41:05 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/8260315.html 前言 主要记录工程应用中的自相关操作&#xff0c;以及自相关的一些理论性质。 代码实现可参考&#xff1a;Xilinx 常用模块汇总(verilog)【03…

Ubuntu 18.04 LTS环境下 MNN 的编译与使用

环境 Ubuntu 18.04 LTS 本文主要介绍从github上下载 MNN 后,如何快速的进行编译 1.安装C/C编译器 gcc 与 NDK #首先安装好gcc, 用来编译 MNN 中的工具等内容 sudo apt install build-essential gcc --version #其次, 安装NDK或者安装Android Studio, 然后安装NDK插件, #在h…

深圳多管齐下破解“融资难”

来源&#xff1a;深圳特区报 2018年01月09日 版次&#xff1a;A13■ 深圳特区报记者 沈勇 文/图“原来只能贷款850万元&#xff0c;后来却顺利地贷到1100万&#xff0c;而且利息并不高。”深圳一家高新技术企业的丁先生对自己在深圳某贷款服务公司的融资体验赞不绝口&#xff0…

建立时间和保持时间的模型分析

建立时间和保持时间的模型分析 起点是源触发器D1的采样时刻,终点是目的触发器D2的采样时刻,假设起点已经满足了建立时间和保持时间要求,现在分析终点采样时刻是否同样满足要求。 其中 Tco:数据正确采样后从D端到达Q端的延时,触发器固有属性,不可改变。TDelay:D1输出端…

虚拟机Ubuntu18.04 root下 连接 windows 中 winScp

Windows 下通过 WinSCP 和 Ubuntu 18.04 连接传输文件 基本原理是Windows下使用 ssh/scp 协议客户端软件WinSCP, Linux/Ubuntu 系统开启ssh/scp协议server服务. 先查看自己Linux/Ubuntu中是否有 ssh服务 如果没有的话先安装 apt-get install openssh-server安装完之后 先手…

年关节点,小心这9大贷款骗局

准备过年了&#xff0c;骗子也出来活动了&#xff0c;作为骗钱的高发区&#xff0c;贷款诈骗就是诈骗团伙重点盯住的肥肉。大家近段是否会经常接收到这样的短信&#xff1a;“银行贷款快速办理”、“无需抵押”、“当天放款”……岁末年初&#xff0c;此类推荐贷款的骚扰电话与…

全民熬夜的时代,如何做到早睡?

-1-2018&#xff0c;给自己定了一个小目标&#xff1a;坚持早睡。翻看2017年早睡的打卡记录&#xff0c;坏消息是有近一半的时间都超过11点入睡&#xff0c;而好消息就是&#xff0c;我每月早睡的完成率在稳步提升。改变要从暑假说起&#xff0c;那段时间自己状态很差&#xff…

电机的简介

电机的简介 通电导体在磁场中受到力的作用–安培力 洛仑磁力的合力。