Android.bp和Android.mk文件有的区别

在这里插入图片描述

文章目录

      • 1. 构建系统
      • 2. 语法和格式
      • 3. 可维护性和扩展性
      • 4. 编译效率
      • 5. 未来趋势

在Android的构建系统中, Android.mkandroid.bp是用于定义如何编译项目文件的两种文件类型,它们有一些显著的区别。

1. 构建系统

  • Android.mk:使用于基于GNU Make的传统构建系统。这种系统已经存在很多年,并且被Android项目广泛使用,直到Gradle等新系统逐渐成为主流。
  • android.bp:使用于Android 7.0(Nougat)之后引入的新构建系统,名为Soong。Soong是基于Ninja构建系统的高级层,旨在替代老旧的Makefile系统,提高构建效率和可维护性。

2. 语法和格式

  • Android.mk:基于Makefile语法,是文本文件,需要遵循Makefile的规则,配置起来可能比较复杂,需要手动处理依赖、目标等问题。它的语法主要使用变量赋值、规则定义等传统的Makefile格式。

    例如:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)LOCAL_MODULE := my_library
    LOCAL_SRC_FILES := my_library.cppinclude $(BUILD_SHARED_LIBRARY)
    
  • android.bp:使用的是基于JSON的更现代化的声明式语法,更加简洁和易读。文件结构通常是模块声明的集合,每个模块包含各种属性,用于定义模块的源文件、依赖、编译选项等。

    例如:

    cc_library_shared {name: "my_library",srcs: ["my_library.cpp"],
    }
    

3. 可维护性和扩展性

  • Android.mk:由于其复杂性和依赖于传统Make系统,维护较大项目时可能会遇到困难。不同的模块之间的依赖关系可能需要开发者手动管理,容易出错。

  • android.bp:Soong系统通过更高的抽象层次简化了依赖管理、模块定义等内容。它更加易于维护,特别是在大型项目中,模块化和复用变得更加简单。

4. 编译效率

  • Android.mk:Makefile系统在处理大规模并行编译时效率可能较低,特别是当项目规模庞大时,编译时间可能较长。

  • android.bp:Soong系统基于Ninja,它被设计为高效处理大规模并行编译的需求,因此在大项目下编译速度更快,更高效。

5. 未来趋势

  • Android.mk:由于Soong系统的引入和推广,Android.mk逐渐被淘汰,虽然很多遗留项目仍然使用它,但谷歌鼓励开发者迁移到Soong系统。

  • android.bp:代表了未来的趋势,新的项目和功能通常会直接在Soong系统中进行开发。

总结来说,Android.mk是旧的基于Make的构建文件,android.bp是新的基于Soong构建系统的文件。后者提供了更现代的语法,更好的性能和更高的可维护性。


结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!

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

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

相关文章

探索Facebook的区块链计划:未来社交网络的变革

随着区块链技术的迅速发展,社交网络领域正面临一场深刻的变革。Facebook,作为全球最大且最具影响力的社交平台之一,正在积极探索区块链技术的应用。本文将深入探讨Facebook的区块链计划,分析其潜在的变革性影响,并展望…

一款好看的WordPress REST API 主题

介绍: 主题特色: 使用Nuxtjs WordPress Rest Api 实现前后端分离,可完成多端部署; 主题支持自动切换黑夜模式。 使用说明: service 目录为wordpress主题文件,需要拷贝到wordpress主题目录下&#xff0…

【本社翻译】Unity官方XR开发电子书

上个月(2024年7月),Unity 官方发布了一本聚焦 XR 开发的电子书,书名为《Create Virtual and Mixed Reality Experiences in Unity》。本书系统介绍了以 XR Interaction Toolkit 为代表的一系列 Unity XR 开发工具集,深…

java多线程(七)AQS(AbstractQueuedSynchronizer)技术解析:以赛跑起跑场景为例

AQS概括 核心思想 AQS(AbstractQueuedSynchronizer)是Java并发包中的一个核心同步器框架,它定义了一套多线程访问共享资源的同步机制。 其核心思想是:利用一个volatile的int类型的变量state来表示同步状态,并通过一…

ansible:

ansible: 远程自动化运维 ansible是基于python开发的配置管理和应用部署工具。 也是自动化运维的重要工具。 可以批量配置,部署,管理上千台主机。 只需要在一台主机配置ansible就可以完成其他主机的操作。 操纵模式: 1、模…

黑神话:悟空-配置推荐

显卡推荐(按类别整理) 1. GTX 10系列、GTX 16系列: 如果希望体验光线追踪,建议根据预算升级到RTX 40系列显卡。对于1080p分辨率,至少需要RTX 4060才能流畅运行。 2. RTX 20系列: RTX 2060、RTX 2070&#…

第二十七节、人物可互动标识

一、多个场景同时存在 方法:将另一个场景拖拽进 当前场景中 这样在一个场景中保存物体,另一个场景切换即可 创建一个场景名为上图(这是一个持久化的场景) 被激活的场景是粗体字的 二、代码 使用第二个代码获得player的子物体 …

SQL注入(cookie、base64、dnslog外带、搜索型注入)

目录 COOKIE注入 BASE64注入 DNSLOG注入—注入判断 什么是泛解析? UNC路径 网上邻居 LOAD_FILE函数 搜索型注入—注入判断 本文所使用的sql注入靶场为sqli-labs-master,靶场资源文件已上传,如有需要请前往主页或以下链接下载 信安必备…

AVI-Talking——能通过语音生成很自然的 3D 说话面孔

概述 论文地址:https://arxiv.org/pdf/2402.16124v1.pdf 逼真的人脸三维动画在娱乐业中至关重要,包括数字人物动画、电影视觉配音和虚拟化身的创建。以往的研究曾试图建立动态头部姿势与音频节奏之间的关联模型,或使用情感标签或视频剪辑作…

SpringBoot Web请求、响应

一、文章概述 请求方面主要讲,当前端向后端发出请求时,对于不同类型的参数后端都如何接收;对于响应,文章会讲解后端如何向前端响应数据以及如何使返回的数据具有统一的格式。 二、请求 2.1接收简单参数 Controller方法&#xf…

算法的学习笔记—二叉搜索树的后序遍历序列(牛客JZ33)

😀前言 在数据结构与算法的学习中,二叉搜索树(BST)是一个重要的概念,而后序遍历则是树的遍历方式之一。今天,我们将深入探讨一个经典问题:如何判断一个给定的整数数组是否是某个二叉搜索树的后序…

【Prettier】代码格式化工具Prettier的使用和配置介绍

前言 前段时间,因为项目的prettier的配置和eslint格式检查有些冲突,在其prettier官网和百度了一些配置相关的资料,在此做一些总结,以备不时之需。 Prettier官网 Prettier Prettier 是一种前端代码格式化工具,支持ja…

甘肃旅游服务平台代码--论文pf

TOC springboot422甘肃旅游服务平台代码--论文pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代,这个时代它就是一个信息内容无比丰富,信息处理与管理变得越加高效的网络化的时代,这个时代让大家的生活不仅变得更加地便利化&#xff0…

Day45 | 99.岛屿数量 深搜 广搜 100.岛屿的最大面积

语言 Java 99.岛屿数量 深搜 广搜 99. 岛屿数量 题目 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可…

【启明智显技术分享】实时操作系统RTOS核心机制与应用

在当今这个对实时性要求日益严苛的嵌入式系统时代,RTOS作为核心软件架构,正扮演着不可或缺的角色。而当我们深入探讨RTOS的广泛应用与优势时,不得不提到启明智显Model系列芯片以其卓越的性能、丰富的外设接口以及对RTOS系统的全面支持&#x…

Qt实现圆型控件的三种方法之子类化控件并重写paintEvent

前言 最近在研究绘制各种形状的控件,这里专门挑出圆形的控件进行记录,其它形状的也大差不差,会了圆形的之后其它的也类似。 正文 这里我挑出Label来进行举例。 子类化 QLabel 并重写 paintEvent 如果需要更复杂的自定义绘制,…

【CSS】使用 CSS 自定义属性(变量)-- var()

自定义属性(有时候也被称作CSS 变量或者级联变量)是由 CSS 作者定义的,它包含的值可以在整个文档中重复使用。由自定义属性标记设定值(比如: --main-color: black;),由 var() 函数来获取值&…

算法全面剖析

算法 查找算法: 顺序查找: 基本思想: 顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功&am…

Nginx--监控

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、Nginx的基础监控 进程监控 端口监控 注意: 这两个是必须要加在zabbix监控,加触发器有问题及时告警。 nginx 提供了ngx…

编译linux内核时,让版本号不跟着git变化

文章目录 编译linux内核时,让版本号不跟着git变化现象方法一方法二 编译linux内核时,让版本号不跟着git变化 现象 内核每次重新编译时,uname -r都会跟着变。 4.1.15-00005-g482731e4-dirty 导致报错,modprobe: can’t change …