当前位置: 首页 > news >正文

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的精彩世界!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深入理解 GC 原理、调度与调优
  • IO进程文件操作
  • scrapy--图片管道-ImagesPipeline
  • Flutter Web 正式官宣弃用 HTML renderer , Canvas 路线成为唯一
  • [mysql][sql]安装完mysql8跨主机不能访问解决办法
  • Science Robotics 与蜜蜂群互动的蜂窝型机器人系统
  • web测试之功能测试常用的方法有哪几种?有什么要点要注意?
  • Leetcode 3266. Final Array State After K Multiplication Operations II
  • Pytorch 模型保存与加载
  • java中拷贝文件数据到U盘
  • Excel的使用总结1
  • 开始尝试从0写一个项目--后端(四)
  • 图形几何算法 -- 判断两条线段是否相交
  • 线性层与MLP层
  • Git 多人协作
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • @angular/forms 源码解析之双向绑定
  • Apache的80端口被占用以及访问时报错403
  • CSS实用技巧
  • Iterator 和 for...of 循环
  • JavaScript实现分页效果
  • underscore源码剖析之整体架构
  • uni-app项目数字滚动
  • 聚类分析——Kmeans
  • 智能合约Solidity教程-事件和日志(一)
  • 《天龙八部3D》Unity技术方案揭秘
  • 【云吞铺子】性能抖动剖析(二)
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 如何在招聘中考核.NET架构师
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #{}和${}的区别?
  • #php的pecl工具#
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (LLM) 很笨
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (不用互三)AI绘画工具应该如何选择
  • (苍穹外卖)day03菜品管理
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)重识new
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET Micro Framework初体验(二)
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET Reactor简单使用教程
  • .net6+aspose.words导出word并转pdf
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • ;号自动换行