Android - Android.mk配置文件

[RK3568 Android11] 开发之创建属于此项目的mk配置文件 前言 为了方便配置此项目系统属性配置项,如果后续有其他的项目也使用到RK3568 Android11,可以直接在sdk/device目录下创建个与此项目相关的mk文件;从而不用去修改其他项目的mk配置项,比如:开机logo文件等;这样在项目切换时,还是比较便利的,方便后续的改动; 一、创建项目的目录 在device/rockchip/目录下创建一个您公司名称,比如创建个haha公司目录,并在haha目录下创建对应项目名称的目录,比如:RK3568B目录;然后在RK35... 阅读详情

Android.mk就如makefile一样,是配置Android 软件工程的,讲解Android.mk写法。


命令及语义

LOCAL_PATH:= $(call my-dir)

一个Android.mk 文件首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

include $(CLEAR_VARS)

CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),
除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。

LOCAL_SRC_FILES :=

这是要编译的源代码文件列表。只要列出要传递给编译器的文件,因为编译系统自动为你计算依赖。
注意源代码文件名称都是相对于LOCAL_PATH的,你可以使用路径部分,例如:
LOCAL_SRC_FILES := foo.c \
toto/bar.c
注意:在生成文件中都要使用UNIX风格的斜杠(/).windows风格的反斜杠不会被正确的处理。

LOCAL_MODULE
这是你模块的名字,它必须是唯一的,而且不能包含空格。你必须在包含任一的$(BUILD_XXXX)脚本之前定义它。模块的名字决定了生成文件的 名字,例如,如果一个一个共享库模块的名字是<foo>,那么生成文件的名字就是lib<foo>.so。但是,在你的NDK生 成文件中(或者Android.mk或者Application.mk),你应该只涉及(引用)有正常名字的其他模块。

include $(BUILD_SHARED_LIBRARY)

表示编译一个共享库。

LOCAL_SHARED_LIBRARIES

这个模块在运行时要依赖的共享库模块列表,在链接时需要,在生成文件时嵌入的相应的信息。注意:这不会附加列出的模块到编译图,也就是,你仍然需要在Application.mk中把它们添加到程序要求的模块中。

LOCAL_STATIC_LIBRARIES

应该链接到这个模块的静态库列表(使用BUILD_STATIC_LIBRARY生成),这仅仅对共享库模块才有意义。

LOCAL_LDLIBS

编译你的模块要使用的附加的链接器选项。这对于使用”-l”前缀传递指定库的名字是有用的。例如,下面将告诉链接器生成的模块要在加载时刻链接到/system/lib/libz.so
LOCAL_LDLIBS := -lz
看docs/STABLE-APIS.TXT获取你使用NDK发行版能链接到的开放的系统库列表。

系统库

LOCAL_C_INCLUDES

路径的可选配置,是从根目录开始的,
all sources (C, C++ and Assembly). For example:
LOCAL_C_INCLUDES := sources/foo
Or even:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
需要在任何包含LOCAL_CFLAGS / LOCAL_CPPFLAGS标志之前。

LOCAL_CFLAGS

可选的编译器选项,在编译C代码文件的时候使用。
这可能是有用的,指定一个附加的包含路径(相对于NDK的顶层目录),宏定义,或者编译选项。
重要信息:不要在Android.mk中改变optimization/debugging级别,只要在Application.mk中指定合适的信息,就会自动地为你处理这个问题,在调试期间,会让NDK自动生成有用的数据文件。

LOCAL_PRELINK_MODULE

编译动态库时,设置是否查找build/core/prelink-linux-arm.map文件,将动态库写进map文件,可以加快动态连接的速度。


模板

可执行程序模板

     #Test Exe
     LOCAL_PATH := $(call my-dir)

     #include $(CLEAR_VARS)

     LOCAL_SRC_FILES:= main.c

     LOCAL_MODULE:= test_exe

     #LOCAL_C_INCLUDES :=

     #LOCAL_STATIC_LIBRARIES :=

     #LOCAL_SHARED_LIBRARIES :=

     include $(BUILD_EXECUTABLE)

(菜鸟级别解释::=是赋值的意思,$是引用某变量的值)LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称,LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,LOCAL_MODULE表示模块最终的名称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。


静态库的模板

     #Test Static Lib

     LOCAL_PATH := $(call my-dir)

     include $(CLEAR_VARS)

     LOCAL_SRC_FILES:= \
               helloworld.c

     LOCAL_MODULE:= libtest_static

     #LOCAL_C_INCLUDES :=

     #LOCAL_STATIC_LIBRARIES :=

     #LOCAL_SHARED_LIBRARIES :=

     include $(BUILD_STATIC_LIBRARY)

一般的和上面相似,BUILD_STATIC_LIBRARY表示编译一个静态库。


动态库的模板

     #Test Shared Lib

     LOCAL_PATH := $(call my-dir)

     include $(CLEAR_VARS)

     LOCAL_SRC_FILES:= \
               helloworld.c

     LOCAL_MODULE:= libtest_shared

     TARGET_PRELINK_MODULES := false

     #LOCAL_C_INCLUDES :=

     #LOCAL_STATIC_LIBRARIES :=

     #LOCAL_SHARED_LIBRARIES :=

      include $(BUILD_SHARED_LIBRARY)

一般的和上面相似,BUILD_SHARED_LIBRARY表示编译一个共享库。


其他说明

以上三者的生成结果分别在如下,generic依具体target会变:
out/target/product/generic/obj/EXECUTABLE
out/target/product/generic/obj/STATIC_LIBRARY
out/target/product/generic/obj/SHARED_LIBRARY

每个模块的目标文件夹分别为:
可执行程序:XXX_intermediates
静态库:      XXX_static_intermediates
动态库:      XXX_shared_intermediates
      另外,在Android.mk文件中,还可以指定最后的目标安装路径,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用以下的宏进行选择:
TARGET_ROOT_OUT:表示根文件系统。
TARGET_OUT:表示system文件系统。
TARGET_OUT_DATA:表示data文件系统。

用法如:

LOCAL_MODULE_PATH:=$(TARGET_ROOT_OUT)

创建 Android 项目的 mk 配置文件 本文将向您介绍如何创建属于您的 Android 项目的 mk 配置文件,并提供相应的源代码示例。当您完成了 Android.mk 文件的编辑后,您可以使用 ndk-build 命令来构建您的库。通过创建 Android.mk 文件并按照您的项目需求进行配置,您可以自定义构建过程和选项。根据您的项目需求,您可以根据需要进行修改和扩展。首先,您需要在您的 Android 项目的根目录下创建一个名为 “Android.mk” 的文件。这将根据您的 Android.mk 文件中的指令来编译和构建您的库。 阅读详情

相关推荐

Android mk/bp构建工具介绍

Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。 Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk文件的

朝气蓬勃 547

配置android.mk,android.mk文件的说明及配置模板

一个Android.mk file用来向编译系统描述你的源代码。具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次。你可以在每一个Android.mk file中定义一个或多个模块,你也可以在几个模块中使用同一个源代码文件。编译系统为你处理许多细节问题。例如,你不需要在你的Android.mk中列出头文件和依赖文件。NDK编译系统将会为你自动处理这些问题。这也意味着,...

weixin_33461476的博客 557

MTK MT6833平台屏幕与TP驱动移植实战:从FAE伪代码到内核模块集成

本文详细介绍了在MTK MT6833平台上进行屏幕与TP驱动移植的完整实战流程。文章从解析供应商提供的初始化伪代码入手,逐步拆解了在LK阶段点亮屏幕、在内核层集成Panel驱动以支持休眠唤醒,以及移植并调试sitronix_ts触摸驱动的核心步骤与关键技巧,为嵌入式开发人员提供了从零到一集成新硬件的清晰指南。

rnn9storyteller的博客 441

androd.mk 文件语法规范

http://blog.163.com/cp7618@yeah/blog/static/70234777201102611363180/<br />Android.mk文件语法规范<br />序言:<br /> -------------<br />此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件。<br /> 为了明白下面的内容,你必须已经阅读了docs/OVERVIEW.TXT的内容,它解释了Android.mk文件扮

Droger (卓哥) 1460

保姆级教程:用rosbag录制和回放你的第一个ROS机器人数据(附C++/Python代码)

本文提供了一份详细的ROS机器人数据录制与回放教程,涵盖从命令行操作到C++/Python编程实现的全流程。通过rosbag工具,开发者可以高效记录和回放机器人运行时的传感器数据和控制指令,适用于故障复现、算法调试等多种场景。教程还包含高级技巧如时间同步和大文件处理,帮助用户快速掌握ROS数据管理核心技能。

weixin_29313239的博客 283

抖音短连接v.douyin.com/xxx 如何生成?

最近公司有个需求,在抖音里如何宣传自己的网站,并且不要有拦截域名的提示,截图如下。 通过ida反编译抖音的app后,将下载后的ipa文件用解压缩软件(如7zip等)解压,从解压后的目录Payload/Aweme.app/找到Aweme可执行文件,拖入ida进行反编译,ida可以检测objective-c语法。 然后进入主题,既然是聊天发消息,就尝试在ida里搜索"message",看看能否找到对...

kakuapi的博客 3万+

Android源码之路(三.配置Android.mk文件)

1.前言:虽然mk文件也只是偶然用到,但是前一段时间用到时花了不少的时间去弄,所以有空就整理一下。另外,这是在android6.0系统做的测试,一些例子也是依据源码的例子来的。(1)整编过得android6.0源码教程:http://blog.csdn.net/github_38117599/article/details/779383392.先配置一个最简单的mk,编译生成一个目标文件(1)在fr

秦城季的博客 3491

全差分运放+开关电容共模反馈

设计一种CMOS全差分折叠式共源共栅结构的运放,其共模反馈用的是开关电容(SC-CMFB)。 下面分别是主运放、偏置电路和开关电容共模反馈电路图 在设计时碰到的问题: 1、增益怎么测? 2、输出波形不平滑? 3、开关的时序频率设置多高? 解答: 1、先设计好主运放和偏置电路,使得运放的输出接近VDD/2,且主运放的管子都工作在饱和区,然后再参考何乐年的《模拟集成电路设计与仿真》仿增益。 2、增益仿完后,仿真瞬态,看电路的工作情况,于是将偏置电路上接Vb4与主运放断开,接到共模反馈上的Vbia上,然后就

qq_36686804的博客 1万+

Android.mk配置事项

预构建库编译 例:导入静态库libx264.a和动态库libx264-148.so LOCAL_PATH := $(call my-dir) #第一组 include $(CLEAR_VARS) LOCAL_MODULE := X264 LOCAL_SRC_FILES := $(LOCAL_PATH)/X264/libx264.a #导入库时LOCAL_SRC_FILES只...

jiejingguo的博客 343

手把手教你:基于STM32H7自制飞控,如何从零开始移植PX4固件(附避坑指南)

本文详细介绍了如何基于STM32H7自制飞控板并移植PX4固件的完整流程,包括硬件设计、开发环境搭建、关键配置文件移植、驱动开发与适配等关键步骤。特别针对PX4-AutoPilot的移植过程提供了实用技巧和避坑指南,帮助开发者高效完成飞控系统开发。

weixin_30271335的博客 143

【中项第三版】系统集成项目管理工程师 | 第 1 章 信息化发展

【中项第三版】系统集成项目管理工程师 | 第 1 章 信息化发展

静谧、淡雅 6576

Jetpack太香了,系统App也想用,怎么办?

第三方App使用Jetpack等开源框架非常流行,在Gradle文件简单指定即可。然而ROM内置的系统App在源码环境下进行开发,与第三方App脱节严重,采用开源框架的情况并不常见。但如果系统App也集成了Jetpack或第三方框架,开发效率则会大大提高。 前言 系统App开发者,很少采用Jetpack 以及第三方框架的原因主要有几点: 导入麻烦:有的框架过于庞大,可能依赖的库比较多,编译文件的构建比较繁琐,没有gradle那么智能 功能单一:系统App注重功能性,业务逻辑较少,依赖庞大库文件的.

m0_58994853的博客 675

Android功耗系列专题理论之一:功耗优化分析思路简介

本文系统介绍了电子系统功耗分析方法,涵盖静态与动态功耗原理、电流波形分析技术和模块化拆解策略。重点阐述了PMIC与CPU协同管理机制、DVFS动态调节技术,以及通过示波器捕获波形特征定位异常的方法。针对亮屏等典型场景,提出三阶段对比分析法,并详细说明硬件/软件拆解方案及混合验证策略。文章还总结了常见问题模块(CPU、多媒体、外设)的排查流程,强调需结合日志分析、温度控制及重复测试确保数据可靠性,为功耗优化提供系统化解决方案。

1459

Android 编译的配置文件:android.mk 和android.bp

(android 10 取消这个参数)此参数会影响到库生成后的存放位置.user: 指该模块只在user版本下才编译eng: 指该模块只在eng版本下才编译tests: 指该模块只在tests版本下才编译optional:指该模块在所有版本下都编译Prelink利用事先链接代替运行时链接的方法来加速共享库的加载,它不仅可以加快起动速度,还可以减少部分内存开销,是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具。

z755924843的专栏 3130

Python爬虫终极实战:逆向解析+异步处理,高效爬取中关村在线万级产品数据

爬虫工程师的战场,已经从简单的HTML解析,转向了对网络协议、JavaScript执行逻辑的深度逆向工程。然后刷新页面,当浏览器发起这个请求时,执行会暂停,我们可以一步步跟蹤调用栈(Call Stack),找到发起请求前的JavaScript代码,从而发现参数的计算逻辑。它们会添加一个动态的、一次性的签名(token)或加密参数,用于验证请求的合法性。这是整个爬虫最核心、最具技术含量的部分。的请求,其响应体正是结构清晰的JSON数据,包含了当前页面的所有手机信息(产品ID、名称、价格、图片等)。

2201_76125261的博客 429

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android 10 根文件系统和编译系统(十五):Android.mk预编译配置文件

配套系列教学视频链接: 安卓系列教程之ROM教学视频-百问100ask 配套系列教学视频链接: 安卓系列教程之ROM教学视频-百问100ask 说明 系统:AOSP Android10.0 设备:Android x86模拟器 前言 预编译本质是通过Android中acp命令来完成拷贝, 将一个文件从一个地方拷贝到另外一个地方, 并且源文件并不需要通过编译器进行编译, 一般都是针对一些二进制文件,比如没有源码的可执行程序,动态库,apk,...

ldswfun的专栏 917

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NDK之配置文件(Android.mk和Application.mk)

Android.mk文件是Android开发中的一个重要编译脚本文件,它用于描述和管理项目的编译过程。

浩瀚之水的专栏 1431

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android系统的BoardConfig.mk配置文件

Android的MESONHWC CONFIG有什么用? Android的BoardConfig.mk有什么用? Android的hwc是什么意思? Android的BoardConfig.mk中的hwc是什么意思? boardconfig.mk的作用 板配置,主要是针对底层的配置文件。在Android系统中,板配置主要在build/target/board和build/core等目录中,名字一般为boardconfig.mk。 它里面主要写了product使用的硬件所支持和不支持的功能性内容。BroadC

yzpbright的博客 5177

Android libjpeg-turbo 项目使用教程

Android libjpeg-turbo 项目使用教程 1. 项目的目录结构及介绍 android-libjpeg-turbo/ ├── jni/ │ ├── vendor/ │ │ ├── libjpeg-turbo/ │ │ │ ├── Android.mk │ │ │ ├── include/ │ │ │ ├── libjpeg-turbo-...

gitblog_01160的博客 766

NDK配置文件Android.mk简介

简介 android.mk主要描述了c或者c++文件时如何在ndk工程中被使用的,该小节主要描述了android.mk的构建规则 概览 android.mk文件描述了你的源码是如何构建的,主要包括:该文件实际上是一个简化了的GNU makefile文件。该文件被构建系统解析一次或多次,因此你需要尽可能少得自定义变量。同样的,也不能在解析过程中认为未定义任何变量 该文件语法决定了...

weixin_30291791的博客 213

opus在安卓编译下的Android.mk

opus在安卓编译下的Android.mk

xdestiny110的博客 864

Android.bp使用、与Android.mk的区别、对应关系、转换

Android.bp与Android.mk的区别 通过Kati将Android.mk转换成ninja格式的文件,通过Blueprint+ Soong将Android.bp转换成ninja格式的文件,通过androidmk将将Android.mk转换成Android.bp,但针对没有分支、循环等流程控制的Android.mk才有效 ninja是一个编译框架,会根据相应的ninja格式的配置文件进行编译,但是ninja文件一般不会手动修改,而是通过将 Android.bp文件转换成ninja格文件来编译

amin_hui的博客 1万+

android.mk 作用,Android.mk的深入介绍

Android.mk的深入介绍2017-08-09 16:11:24 +08字数:3945标签:AndroidMakefileAndroid.mk作为Android单模块编译的Makefile,有其独特的写法。本文从原理、源码的角度触发,介绍Android.mk怎么写,以及如何查找更多信息。Android的编译系统,总体来说是由Makefile写的一个项目。而Android.mk,只是其中的一个子...

weixin_42510446的博客 892

【Android编译】各个模块编译方法

一、如何编译出vendor.img 1. 首先找到产品对应BoardConfig.mk   路径:LINUX/android/     device/项目/产品/BoardConfig.mk 2. 修改BoardConfig.mk   设置下面代码中的ENABLE_VENDOR_IMAGE为true。 #Enable split vendor image ENABLE_VE...

weixin_30731287的博客 1412

Android.bp文件

Android.bp,是用来替换Anddroid.mk的配置文件。使用Blueprint框架来解析,最终转换成Ninja文件。与Android.mk不同的是,Android.bp是纯粹的配置文件,不包含分支、循环等流程控制,也不能做算数、逻辑运算 ...

perfectnihil的博客 1881

Android NDK 配置文件详解

NDK程序中有两个配置文件:Android.mk 和Application.mk,其中Android.mk文件主要描述了如何编译C\C++源代码,Application.mk文件用于描述当前应用程序需要哪些模块。     Android NDK定义的变量

菩提本无树 明镜亦非台 本来无一物 何处惹尘埃 1149
上一篇: Ubuntu配置tftp服务和NFS服务
下一篇: Android - 小技巧
G机器猫
博客等级 码龄16年 106粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值