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

网站运营分析竞争对手淘宝运营培训内容

网站运营分析竞争对手,淘宝运营培训内容,外包加工网app,筑建网说明#xff1a;本文将解读Ninja构建系统#xff0c;这是当前Android Framework中广泛使用的构建工具。我们将从Ninja的起源和背景信息开始#xff0c;逐步解读Ninja的优势和核心原理#xff0c;并探讨其一般使用场景。然后介绍其在Android Framework中的应用及相关工具本文将解读Ninja构建系统这是当前Android Framework中广泛使用的构建工具。我们将从Ninja的起源和背景信息开始逐步解读Ninja的优势和核心原理并探讨其一般使用场景。然后介绍其在Android Framework中的应用及相关工具kati、soong、gn等最后介绍下如何自行构建一个Ninja编译系统以便于对Ninja有一个完整的了解。 1 Ninja基本内容解读 1.1 什么是Ninja Ninja是一个小型的、专注于速度的构建系统最初由Google的程序员Chris Manson开发最初用于加速Chrome浏览器的构建过程。Ninja的设计哲学是简化构建过程通过精确指定输入和输出关系实现快速增量构建。Ninja的首次使用是在开源的Chromium浏览器项目中该项目拥有超过30,000个源文件Ninja能够在不到一秒的时间内开始构建过程相较于其他构建系统有显著的速度优势。 与Make相比Ninja舍弃了各种高级功能来实现快速的增量编译。Make具有各种高级功能比如函数、内置规则而Ninja则专注于速度。Ninja的构建文件是可读的但更多场合下是由其他构建系统的工程文件自动生成的。 Ninja被用于构建Google Chrome、部分Android系统、LLVM等项目。由于CMake支持Ninja后端CMake可以生成Ninja构建文件从而利用Ninja的高效构建能力。 总之Ninja是一个快速、轻量级的构建系统专注于增量构建常用于大型项目。 1.2 Ninja的核心原理解读 Ninja的核心原理基于构建文件中定义的规则和依赖关系通过构建图依赖图来确定需要重新构建的目标。Ninja使用简单的文件时间戳比较来实现增量构建避免了不必要的编译过程。总结下它的核心原理主要包含以下几个方面 依赖图 Ninja构建过程基于一个明确的依赖图这个依赖图定义了项目中所有文件的依赖关系。每个节点代表一个文件或一个构建命令边代表依赖关系。Ninja在构建前会构建这个依赖图并在构建时只执行那些受影响的节点。构建文件 Ninja使用.ninja文件作为输入这些文件包含了构建规则和目标。这些规则定义了如何从输入文件生成输出文件。.ninja文件通常由其他工具如GN或CMake生成。增量构建 只有当输入文件发生变化时Ninja才会重新构建目标。它通过比较文件的时间戳来确定哪些文件需要更新。并行构建 Ninja能够并行执行多个构建任务以充分利用多核处理器的能力。它会智能地调度任务以最大化并行度并减少构建时间。避免冗余 Ninja的设计避免了不必要的工作。例如它不会在构建过程中重新扫描依赖关系因为这些信息已经在构建文件中明确指定。简洁性 Ninja的构建文件.ninja文件是简洁的专注于构建逻辑不包含条件逻辑或循环。这使得构建文件易于理解和维护。可靠性 Ninja在构建过程中会捕获错误并立即停止这样可以避免无效的构建尝试。工具链无关性 Ninja本身不关心底层的编译器或工具链它只负责调度构建任务。这使得Ninja可以与多种编译器和工具链一起使用。跨平台 Ninja可以在Windows、Linux和macOS等多种操作系统上运行这使得它适用于跨平台项目。性能 Ninja的性能非常出色尤其是在大型项目中。它能够快速地开始构建过程并在构建过程中保持高效率。 Ninja的核心原理是提供一个简单、快速、可靠的构建系统它通过优化构建过程和利用现代硬件的优势来实现这一目标。 1.3 Ninja相比于make的优势 Ninja 和 Make 都是构建系统用于自动化编译和构建软件项目。Ninja 是在 Make 的基础上发展起来的它旨在解决 Make 在某些方面的局限性特别是在大型项目中的性能问题。以下是 Ninja 相比 Make 的一些优势 速度 Ninja 的主要优势是速度快。它在设计时就注重减少磁盘 I/O 和提高构建速度。Ninja 通过预先计算构建依赖关系并在构建文件中明确指定从而避免了 Make 在构建过程中重复扫描源代码文件的开销。并行构建 Ninja 能够更有效地利用多核处理器进行并行构建。它默认就会并行执行构建任务而 Make 需要显式地通过 -j 选项来指定并行构建的作业数。依赖关系 Ninja 的依赖关系更加明确和静态。它不依赖于文件的时间戳来确定是否需要重新构建而是使用文件内容的哈希值这减少了在构建过程中的不确定性和不必要的构建。构建文件 Ninja 的构建文件.ninja 文件通常由其他工具如 GN 或 CMake生成这使得构建文件的维护和管理更加一致和简单。而 Makefile 通常需要手工编写容易出错且难以维护。简洁性 Ninja 的构建文件更加简洁因为它避免了 Makefile 中常见的复杂逻辑和条件判断。这使得 Ninja 文件更容易理解和修改。可靠性 Ninja 在遇到错误时会立即停止构建而不是尝试继续执行其他任务。这有助于更快地发现和解决问题。跨平台 Ninja 支持跨平台构建可以在 Windows、Linux 和 macOS 上运行而 Make 起源于 Unix 系统虽然也有跨平台的支持但在某些平台上可能需要额外的配置。工具链无关性 Ninja 不关心底层的编译器或工具链它只负责调度构建任务。这使得 Ninja 可以与多种编译器和工具链一起使用而 Make 可能需要为不同的编译器或工具链编写不同的 Makefile。一致性 Ninja 通过生成的构建文件来执行构建这使得构建过程更加一致不受环境变化的影响。而 Makefile 可能会受到当前 shell 环境的影响。性能 Ninja 在大型项目中的性能优势尤为明显因为它能够更快地启动构建过程并且在增量构建时更加高效。 总的来说Ninja 通过优化构建过程和利用现代硬件的优势提供了一种更快速、更可靠、更易于维护的构建解决方案。 1.4 Ninja的安装 ubuntu上可以直接安装 $sudo apt install ninja-build 1.5 Ninja的一般使用场景 以下是 Ninja 的一般使用场景 跨平台构建Ninja 支持在 Windows、Linux 和 macOS 等多种操作系统上运行适用于跨平台项目构建。大型项目构建Ninja 特别适合于大型项目如 Chromium、LLVM 等这些项目包含成千上万个源文件Ninja 通过并行编译显著缩短构建时间。与现代构建系统配合Ninja 常与 CMake 或 Meson 等现代构建系统配合使用生成高效的构建文件。持续集成/持续部署CI/CD在 CI/CD 系统中Ninja 的快速构建能力有助于缩短反馈循环时间提高构建和测试的效率。需要快速迭代的场景在开发过程中如果需要频繁编译Ninja 可以提供快速的反馈循环使得开发者可以更快地进行代码迭代。自定义构建规则Ninja 允许开发者自定义构建规则适用于需要特殊构建逻辑的项目。与Android NDK配合Android NDK 默认使用 Ninja 进行原生库的构建因此在 Android 原生应用开发中Ninja 是一个重要的工具。Bazel 构建工具Google 的 Bazel 构建工具虽然有自己的内部构建系统但也可以配置为使用 Ninja 提高性能。 Ninja 的核心优势在于其构建速度和并行编译能力这使得它成为许多大型和复杂项目的理想选择。 2 Ninja在Android Framework中的应用 Ninja适用于需要快速构建的大型项目尤其是在C/C代码编译方面表现出色。在Android Framework的构建中Ninja主要用于编译原生代码同时也支持Java/Kotlin代码的编译。 随着Android系统的不断演进从Android 7.0Nougat开始引入了Soong构建系统它使用Android.bp文件来定义构建规则并生成Ninja文件然后由Ninja执行实际的编译和链接任务。 2.1 为什么要引入ninja 实际上在Android 7.0Nougat之前Android系统主要使用Makefile和Android.mk文件来描述构建过程。这些文件定义了如何编译和链接模块并通过调用make命令来执行构建任务。 随着Android系统和应用程序的增长这种构建方式变得越来越慢尤其是在大型项目中。为了解决这个问题Google开始引入新的构建系统来提高编译速度和效率。 2.2 过渡期工具Kati工具 在从Make过渡到Ninja的过程中Google开发了Kati工具用于将Android.mk文件转换为Ninja可以理解的构建文件。这样现有的Android.mk文件可以被重用于新的构建系统而不需要立即迁移到新的格式。 这里给出一个简单的kati工具使用的流程便于更好地理解Kati工具 假设你有一个简单的 Android.mk 文件它定义了一个模块的编译规则如下所示 include $(CLEAR_VARS) LOCAL_MODULE : my_module LOCAL_SRC_FILES : my_source.c include $(BUILD_SHARED_LIBRARY) 这个 Android.mk 文件告诉构建系统如何编译一个共享库 my_module它由 my_source.c 源文件构建而来。使用 Kati 转换这个过程如下 $cd path/to/your/module $ckati --ninja 这将生成一个 build.ninja 文件内容类似于 rule cccommand gcc -c $cflags -o $out $indescription COMPILEbuild my_module.o: cc my_source.c build my_module: link my_module.o 然后你可以使用 Ninja 来构建这个模块 $ninja -f build.ninja 2.3 Soong工具构建系统引入 从Android 7.0Nougat开始引入了Soong构建系统它使用Android.bp文件来定义构建规则并生成Ninja构建文件。在Android 8.0Oreo中Google进一步引入了Android.bp文件和Soong构建系统。Android.bp文件是一种更简洁、更易于维护的构建脚本格式。Soong是一个新的构建引擎它使用Android.bp文件来生成Ninja构建文件。 这里给出一个简单的kati工具使用的流程便于更好地理解Soong工具 假设你有一个简单的 Android.bp 文件它定义了一个 C/C 库的构建规则如下所示 cc_library_shared {name: my_library,srcs: [src/my_library.c],shared_libs: [liblog],export_include_dirs: [include], } 这个 Android.bp 文件告诉构建系统如何编译一个共享库 my_library它由 src/my_library.c 源文件构建而来并包含 liblog 库。 在 Android 构建环境中通常不需要直接调用 Soong 命令因为构建脚本会自动化这个过程。这里为了方便理解使用手动方式触发 Soong 的构建过程使用以下命令 source build/envsetup.sh lunch XXX-target out/soong/.bootstrap/bin/soong_build --make-mode target-moudle 这个命令会执行 Soong生成 out/soong/build.ninja 文件然后 Ninja 会使用这个文件来编译项目使用 Ninja 来构建这个模块 $ninja -f build.ninja 2.4 GN工具的引入 GNGenerate Ninja是一个由Google开发的元构建系统它用于生成Ninja构建文件这些文件随后由Ninja构建系统使用来编译项目。GN在Android系统中的使用是逐步引入的。 GN在Android系统中的引入最开始主要是为了改善Chromium项目的构建性能。Chromium是Google Chrome浏览器的开源项目它有着庞大的代码库。GN的设计目标是减少构建时间尤其是在大型项目中。GN通过并行构建和优化依赖关系来提高构建速度。 从Android 8.0Oreo开始GN的使用更加广泛并且随着Android版本的更新GN和Ninja的集成逐渐深入到Android的构建系统中。GN的主要优势如下 速度GN生成的Ninja文件能够快速执行构建任务尤其是在大型项目中。可读性GN的构建文件.gn或BUILD.gn比传统的Makefile更容易阅读和维护。跨平台GN支持跨平台构建可以在不同的操作系统上使用。 总的来说GN的引入也是为了提高Android系统和Chromium等大型项目的构建效率。 gn的安装可以从官网下载代码编译 $git clone https://gn.googlesource.com/gn $cd gn $python build/gen.py $ninja -C out 然后把二进制文件放到你的路径里即可。 这里给出一个简单的GN工具使用的流程便于更好地理解GN工具 假设你有一个简单的 C 项目你需要编写一个 BUILD.gn 文件来告诉 GN 如何构建它。这个文件可能会包含如下内容 # 定义一个可执行文件目标 executable(my_app) {sources [main.cc,utils.cc,]deps [//third_party/some_library,] } 这个 BUILD.gn 文件定义了一个名为 my_app 的可执行文件它依赖于 main.cc 和 utils.cc 这两个源文件以及一个名为 some_library 的第三方库。 在 Android 构建环境中GN 的执行通常是自动的。这里为了方便理解手动运行 GN在项目根目录下运行以下命令 $gn gen out/debug --dotfileout/debug/gn_graph.dot 这个命令会生成一个名为 out/debug 的输出目录生成一个 Ninja 构建文件。并创建一个名为 gn_graph.dot 的文件该文件包含了构建图的 Graphviz 表示用于可视化构建过程。 然后可以使用 Ninja 来构建这个模块 $ninja -f build.ninja 2.5 详细解读kati soong gn与Ninja之间的关系 Kati、Soong、GN 和 Ninja 都是构建系统组件。在 Android 系统的编译过程中这些工具通常按照以下流程工作 GN 将BUILD.gn转换为 Ninja 文件。Kati 将 Android.mk 转换为 Ninja 文件。Soong 解析 Android.bp 文件并生成 Ninja 文件。Ninja 读取生成的 Ninja 文件并执行构建任务。 总的来说GN Kati Soong相当于cmake的角色而Ninja相当于make的角色。同时GN 和 Ninja 是现代构建系统的工具而 Kati 和 Soong 是 Android 在从旧的 Make 构建系统过渡到基于 Ninja 的构建系统过程中引入的组件。 作为一个高效、轻量级的构建工具在Android Framework的构建过程中发挥着重要作用。了解Ninja的原理和优势可以帮助开发者更好地优化构建过程提高开发效率。接下来用一个最简单的例子我们来熟悉一下Ninja的编译流程。 3 构建一个最简单Ninja编译系统 构建一个最简单的 Ninja 编译系统你需要以下2个文件一个 C/C 源文件、一个 Ninja 构建文件。以下是一个简单的 Hello, World! 程序的例子。 3.1 源代码文件hello.c // hello.c #include stdio.hint main() {printf(Hello, World!\n);return 0; } 3.2 Ninja 构建文件build.ninja # 定义编译器 cflags -Wall# 定义构建规则 rule cccommand gcc $cflags -c $in -o $outdescription Compiling $out# 定义构建目标 build hello.o: cc hello.c build hello: link hello.ocommand gcc -o $out $indescription Linking $out 3.3 运行 Ninja 构建 首先确保你已经安装了 Ninja。然后在包含上述两个文件的目录中打开命令行运行以下命令 #默认路径 $ninja 这个命令会检查 build.ninja 文件中的指令编译 hello.c 文件并将其链接成可执行文件 hello。构建完成后你可以运行生成的可执行文件 $./hello Hello, World!
文章转载自:
http://www.morning.kqcqr.cn.gov.cn.kqcqr.cn
http://www.morning.rqqmd.cn.gov.cn.rqqmd.cn
http://www.morning.npfrj.cn.gov.cn.npfrj.cn
http://www.morning.grlth.cn.gov.cn.grlth.cn
http://www.morning.plznfnh.cn.gov.cn.plznfnh.cn
http://www.morning.hwzzq.cn.gov.cn.hwzzq.cn
http://www.morning.qmbtn.cn.gov.cn.qmbtn.cn
http://www.morning.wmdbn.cn.gov.cn.wmdbn.cn
http://www.morning.krywy.cn.gov.cn.krywy.cn
http://www.morning.sdamsm.com.gov.cn.sdamsm.com
http://www.morning.krzrg.cn.gov.cn.krzrg.cn
http://www.morning.mypxm.com.gov.cn.mypxm.com
http://www.morning.lwzpp.cn.gov.cn.lwzpp.cn
http://www.morning.jqwpw.cn.gov.cn.jqwpw.cn
http://www.morning.mlmwl.cn.gov.cn.mlmwl.cn
http://www.morning.mmplj.cn.gov.cn.mmplj.cn
http://www.morning.nnttr.cn.gov.cn.nnttr.cn
http://www.morning.nzdks.cn.gov.cn.nzdks.cn
http://www.morning.pfnlc.cn.gov.cn.pfnlc.cn
http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn
http://www.morning.ymbqr.cn.gov.cn.ymbqr.cn
http://www.morning.tlfmr.cn.gov.cn.tlfmr.cn
http://www.morning.chongzhanggui.cn.gov.cn.chongzhanggui.cn
http://www.morning.zfhwm.cn.gov.cn.zfhwm.cn
http://www.morning.mlpch.cn.gov.cn.mlpch.cn
http://www.morning.yrlfy.cn.gov.cn.yrlfy.cn
http://www.morning.pclgj.cn.gov.cn.pclgj.cn
http://www.morning.wwznd.cn.gov.cn.wwznd.cn
http://www.morning.ftzll.cn.gov.cn.ftzll.cn
http://www.morning.phwmj.cn.gov.cn.phwmj.cn
http://www.morning.ygwbg.cn.gov.cn.ygwbg.cn
http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn
http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn
http://www.morning.prls.cn.gov.cn.prls.cn
http://www.morning.rgxn.cn.gov.cn.rgxn.cn
http://www.morning.swlwf.cn.gov.cn.swlwf.cn
http://www.morning.qnbck.cn.gov.cn.qnbck.cn
http://www.morning.jksgy.cn.gov.cn.jksgy.cn
http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn
http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn
http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn
http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn
http://www.morning.fktlg.cn.gov.cn.fktlg.cn
http://www.morning.rqmqr.cn.gov.cn.rqmqr.cn
http://www.morning.myfwb.cn.gov.cn.myfwb.cn
http://www.morning.gqcd.cn.gov.cn.gqcd.cn
http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn
http://www.morning.gjmll.cn.gov.cn.gjmll.cn
http://www.morning.tfcwj.cn.gov.cn.tfcwj.cn
http://www.morning.nbqwt.cn.gov.cn.nbqwt.cn
http://www.morning.sfsjh.cn.gov.cn.sfsjh.cn
http://www.morning.qzpqp.cn.gov.cn.qzpqp.cn
http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn
http://www.morning.tkchm.cn.gov.cn.tkchm.cn
http://www.morning.pjtnk.cn.gov.cn.pjtnk.cn
http://www.morning.hxrg.cn.gov.cn.hxrg.cn
http://www.morning.mkzdp.cn.gov.cn.mkzdp.cn
http://www.morning.wqnc.cn.gov.cn.wqnc.cn
http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn
http://www.morning.fjshyc.com.gov.cn.fjshyc.com
http://www.morning.kztts.cn.gov.cn.kztts.cn
http://www.morning.ntqlz.cn.gov.cn.ntqlz.cn
http://www.morning.xgcwm.cn.gov.cn.xgcwm.cn
http://www.morning.tlfzp.cn.gov.cn.tlfzp.cn
http://www.morning.hxsdh.cn.gov.cn.hxsdh.cn
http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn
http://www.morning.ctqbc.cn.gov.cn.ctqbc.cn
http://www.morning.wfbs.cn.gov.cn.wfbs.cn
http://www.morning.hqbk.cn.gov.cn.hqbk.cn
http://www.morning.mjmtm.cn.gov.cn.mjmtm.cn
http://www.morning.thnpj.cn.gov.cn.thnpj.cn
http://www.morning.dbrpl.cn.gov.cn.dbrpl.cn
http://www.morning.cjnfb.cn.gov.cn.cjnfb.cn
http://www.morning.haibuli.com.gov.cn.haibuli.com
http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn
http://www.morning.rlhgx.cn.gov.cn.rlhgx.cn
http://www.morning.sqlh.cn.gov.cn.sqlh.cn
http://www.morning.mxmzl.cn.gov.cn.mxmzl.cn
http://www.morning.qfbzj.cn.gov.cn.qfbzj.cn
http://www.morning.ysbrz.cn.gov.cn.ysbrz.cn
http://www.tj-hxxt.cn/news/238173.html

相关文章:

  • 网站开发硬件成本手机软件公司
  • 广东做网站找谁软文发布平台
  • 外贸做网站公司哪家好wordpress 镇企
  • h5网站建设方案公司网站建设及安全解决方案
  • 吴江规划建设局网站晋江模板建站
  • 窗帘网站建设策划书如何做百度推广的网站
  • 物流网站和数据库建设荥阳市建设局 网站
  • 做网站 网络科技公司网站域名怎么缴费
  • 昆明网站建设王道下拉棒合肥今天发现了一例病例吗
  • 网站自主建站游戏外包公司是干嘛的
  • e4a怎么做网站appwordpress-5.1
  • 网站开发区免费中文企业网站模板
  • php网站开发技术描述杭州建设网站设计的公司
  • 网站地图什么时候提交好做群头像的网站在线制作
  • 温州做外贸网站厦门网站建设优化企业
  • 网站图片优化怎么搞软件开发
  • 中国少数民族网站建设小程序源码是什么意思
  • 厦门网站排名优化价格免费网站大全下载
  • 利用帝国软件如何做网站营销做得好的品牌
  • 不收费的网站常州seo博客
  • 南宁网站开发培训seo网站推广方案策划书
  • 柳州 网站建设中国全案设计联盟
  • 手机端网站推广免费wap建站的网址是什么了
  • 网站建设设计图片东莞seo整站优化
  • 广东外贸网站建设网站建设中通知
  • 网站设计网站浏览响应式网站模板 视差
  • 企业网站定制源码怎么做成app软件手机版
  • 查看网站的 cms批量更新wordpress文章
  • 做同城网站还有机会吗网站建设就问山东聚搜网络f
  • 福州小型网站建设网站别人备案怎么办