目录

  • 一、DEPS结构
    • deps
    • hooks
  • 二、DEPS解析产物
    • 1、GIT
    • 2、CIPD(Chrome Infrastructure Package Deployment)
      • 下载地址错误问题
      • 地址修复流程
    • 3、GoogleStorage
  • 三、DEPS工具
    • 下载
    • 使用
  • 四、DEPS下载流程

DEPS进行依赖管理在Google系统项目中大量存在,如flutter、skia、v8等。因网络的原因要想编译这些项目,还是需要了解一些DEPS相关的知识,否则遇到些问题就不知道如何处理了。

一、DEPS结构

DEPS文件主要包含以下3部分内容

  • 源码所有仓库地址及commitId
  • 工具的下载地址
  • 要执行的脚本

DEPS文件的配置主要分为两项,一个是deps项,源码及工具都在deps配置下;另一个是hooks项,要执行的脚本都在hooks下配置。

deps

deps配置为键值对,key为目标存放路径,value为目标的下载地址,源码项为git仓库地址及所在commitId;工具则存储在数据仓库CIPD、GoogleStore等。

deps = {'src': 'https://github.com/flutter/buildroot.git' + '@' + '8747bce41d0dc6d9dc45c4d1b46d2100bb9ee688','src/third_party/harfbuzz': Var('flutter_git') + '/third_party/harfbuzz' + '@' + 'd40d15e994ed60d32bcfc9ab87004dfb028dfbd6','src/third_party/glfw': Var('fuchsia_git') + '/third_party/glfw' + '@' + '78e6a0063d27ed44c2c4805606309744f6fb29fc','src/buildtools/windows-x64/clang': {'packages': [{'package': 'fuchsia/third_party/clang/windows-amd64','version': Var('clang_version'),}],'condition': 'download_windows_deps','dep_type': 'cipd',}
}

hooks

即源码及工具下载完成后要执行的脚本。name字段为脚本名称,即让他人明白脚本是要做什么的;action为要执行的脚本命令。

hooks = [{# Generate the Dart SDK's .dart_tool/package_confg.json file.'name': 'Generate .dart_tool/package_confg.json','pattern': '.','action': ['python3', 'src/third_party/dart/tools/generate_package_config.py'],},{# Generate the sdk/version file.'name': 'Generate sdk/version','pattern': '.','action': ['python3', 'src/third_party/dart/tools/generate_sdk_version_file.py'],}
]

二、DEPS解析产物

.执行gclient sync命令会对DEPS文件进行解析,生成gclient_entries文件,此文件为各依赖项解析后的下载地址。依赖被存储在git仓库或文件仓库中,文件仓库有两种一是CIPD、另一个是GoogleStorage

entries = {'src/flutter': 'https://github.com/flutter/engine.git@800594f1f4a6674010a6f1603c07a919b4d7ebd7','src': 'https://github.com/flutter/buildroot.git@8747bce41d0dc6d9dc45c4d1b46d2100bb9ee688','src/buildtools/windows-x64/clang:fuchsia/third_party/clang/windows-amd64': 'https://chrome-infra-packages.appspot.com/fuchsia/third_party/clang/windows-amd64@git_revision:a93d03310e2c02fa5e24544df4706650f85788f7','src/flutter/prebuilts/windows-arm64/dart-sdk:flutter/dart-sdk/windows-arm64': 'https://chrome-infra-packages.appspot.com/flutter/dart-sdk/windows-arm64@git_revision:6fb1982e93c3da7b5458db9838a6fd67d379c329','src/flutter/prebuilts/windows-x64/dart-sdk:flutter/dart-sdk/windows-amd64': 'https://chrome-infra-packages.appspot.com/flutter/dart-sdk/windows-amd64@git_revision:6fb1982e93c3da7b5458db9838a6fd67d379c329','src/flutter/third_party/gn:gn/gn/${platform}': 'https://chrome-infra-packages.appspot.com/gn/gn/${platform}@git_revision:b79031308cc878488202beb99883ec1f2efd9a6d','src/flutter/third_party/ninja:infra/3pp/tools/ninja/${platform}': 'https://chrome-infra-packages.appspot.com/infra/3pp/tools/ninja/${platform}@version:2@1.8.2.chromium.3','src/third_party/abseil-cpp': 'https://flutter.googlesource.com/third_party/abseil-cpp.git@61833f2c057a2b1993d871e8c51156aed1dd4354','src/third_party/android_tools/google-java-format:flutter/android/google-java-format': 'https://chrome-infra-packages.appspot.com/flutter/android/google-java-format@version:1.7-1','src/third_party/angle': 'https://chromium.googlesource.com/angle/angle.git@094b49db60cb48ee932a875898b57accbfa656de'
}

.gclient_entries文件中在${platform}变量,此变量根据系统信息进行赋值,platform值有以下几种:

  • windows-amd64
  • windows-arm64
  • linux-amd64
  • linux-arm64
  • macos-amd64
  • macos-arm64

1、GIT

即项目及依赖所在的git仓库信息

deps = {'src': 'https://github.com/flutter/buildroot.git' + '@' + '8747bce41d0dc6d9dc45c4d1b46d2100bb9ee688','src/third_party/harfbuzz': Var('flutter_git') + '/third_party/harfbuzz' + '@' + 'd40d15e994ed60d32bcfc9ab87004dfb028dfbd6'
}

2、CIPD(Chrome Infrastructure Package Deployment)

仓库地址:https://chrome-infra-packages.appspot.com/

CIPD(Chrome Infrastructure Package Deployment),此仓库存储的是二进制文件,如工具、压缩包等,而非源码。

deps = {'src/flutter/prebuilts/windows-x64/dart-sdk': {'packages': [{'package': 'flutter/dart-sdk/windows-amd64','version': 'git_revision:'+Var('dart_revision')}],'dep_type': 'cipd','condition': 'host_os == "win" and download_dart_sdk'},'src/flutter/third_party/gn': {'packages': [{'package': 'gn/gn/${{platform}}','version': 'git_revision:b79031308cc878488202beb99883ec1f2efd9a6d'},],'dep_type': 'cipd',},
}

下载地址错误问题

因网络、环境等因素此类型的依赖可能不能被正常下载。如,在.gclient_entries文件中生成的下载路径不能被正常访问,
.gclient_entries路径:
https://chrome-infra-packages.appspot.com/fuchsia/third_party/clang/windows-amd64@git_revision:a93d03310e2c02fa5e24544df4706650f85788f7

正确路径:
https://chrome-infra-packages.appspot.com/p/fuchsia/third_party/clang/windows-amd64/+/git_revision:a93d03310e2c02fa5e24544df4706650f85788f7

地址修复流程

针对.gclient_entries文件中生成的链接,可做如下修改即可

1、 在域名后加上p/路径

# 修改前
https://chrome-infra-packages.appspot.com/fuchsia/
# 修改后
https://chrome-infra-packages.appspot.com/p/fuchsia/

2、将@替换成/+/

# 修改前
amd64@git_revision
# 修改后
amd64/+/git_revision

3、将${platfrom}占位符换成对应的平台字符串,如windows-amd64、linux-amd64、mac-amd64等

# 修改前
infra/3pp/tools/ninja/${platform}
# 修改后
infra/3pp/tools/ninja/windows-amd64

3、GoogleStorage

此类型配置依赖DEPS文件中的配置信息,及本地的.sha1文件中的sha1值,执行download_from_google_storage脚本从指定bucket下载指定平台压缩包文件。download_from_google_storage脚本位于depot_tools工具目录下,初次执行此脚本会下载当前平台使用的gsutil_xxx.zip文件,如果不能正常下载,可修改python脚本,打日志看一下错误信息。

  {'name': '7zip','pattern': '.','condition': 'download_windows_deps','action': ['download_from_google_storage','--no_auth','--no_resume','--bucket','dart-dependencies','--platform=win32','--extract','-s','src/third_party/dart/third_party/7zip.tar.gz.sha1',],}

三、DEPS工具

gclient

下载

Linux/Mac端直接使用git下载即可

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

windows端直接从此页找到下载地址进行下载。

使用

deps使用特别简单,只需在.gclient文件配置好要下载的仓库信息,执行gclient sync下载即可。

1、配置.gclient文件
.gclient文件可手动创建也可以通过gclient config进行配置,建议直接使用config命令创建,否则还需要记住.gclient文件内容。

# 配置flutter仓库地址,同时指明要clone的commitId
gclient config https://github.com/flutter/engine.git@800594f1f4a6674010a6f1603c07a919b4d7ebd7

.gclient文件内容如下

solutions = [{ "name"        : 'src/flutter',"url"         : 'https://github.com/flutter/engine.git@800594f1f4a6674010a6f1603c07a919b4d7ebd7',"deps_file"   : 'DEPS',"managed"     : False,"custom_deps" : {},"custom_vars": {},},
]

2、执行下载
在.gclient文件所在目录执行gclient sync即可触发依赖下载。

gclient sync

四、DEPS下载流程

1、解析DEPS文件,生成.gclient_entries文件。
2、根据.gclient_entries文件下载文件到指定目录。
3、执行DEPS文件中的hooks脚本

Google依赖管理DEPS相关推荐

  1. 18.play依赖管理

    18.依赖管理 Play的依赖管理系统允许你通过一个单独的dependencies.yml 文件来描述你的应用程序所采用的扩展依赖. Play应用程序可以有三种类型的依赖: Play框架自身,这是因为 ...

  2. Gradle for Android 第三篇( 依赖管理 )

    Gradle for Android 第三篇( 依赖管理 ) 依赖管理是Gradle最闪耀的地方,最好的情景是,你仅仅只需添加一行代码在你的build文件,Gradle会自动从远程仓库为你下载相关的j ...

  3. 【Groovy】构建工具 ( 构建工具引入 | Gradle 构建工具作用 | 传统的依赖管理 )

    文章目录 一.构建工具引入 二.Gradle 构建工具作用 三.传统的依赖管理 一.构建工具引入 构建工具 用于 管理代码项目的 依赖 , 编译 , 测试 , 发布 周期 ; 常见的构建工具 : An ...

  4. erlang rebar 配置mysql_Erlang Rebar 使用指南之四:依赖管理

    Erlang Rebar 使用指南之四:依赖管理 全文目录: 本章链接: 1 rebar依赖定义 Rebar取得和构建符合OTP/Rebar规范的项目.如果项目包含子项目,Rebar会自动递归地构建它 ...

  5. Java Gradle入门指南之依赖管理(添加依赖、仓库、版本冲突)

    Java Gradle入门指南之依赖管理(添加依赖.仓库.版本冲突) 作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/52 ...

  6. java单例模式深入详解_javascript 模块依赖管理的本质深入详解

    本文实例讲述了javascript 模块依赖管理的本质.分享给大家供大家参考,具体如下: 模块模式定义 模块是'javascript'的一种设计模式,它为函数定义一个包装函数,并且该包装函数的返回值与 ...

  7. gradle依赖管理_依赖管理

    gradle依赖管理 Why Bother 何必呢 Writing software is a very expensive process, and most systems we interact ...

  8. Maven项目依赖管理 学习笔记

    本学习笔记根据慕课视频[Maven项目依赖管理]摘录,主要学习maven的使用方式,从理念到实践.基础到应用,掌握基于maven管理java项目的方式. 目录 第一章 Maven概述 Maven简介 ...

  9. 统一依赖管理Composing builds

    背景 在我们的AS项目中,经常引用多个Module,多人参与项目开发,这种背景下,我们会时常遇到版本冲突问题,出现不同的compileSdkVersion等,导致我们的包体变大,项目运行时间变长,所以 ...

最新文章

  1. 工作流引擎设计之退回任务定义
  2. 一键抓取sqlserver数据结构
  3. 电动滑板改装 特斯拉电机 120A FVT电调的使用
  4. des解密 given final_人设不能崩[无限]作者:条纹花瓶(无限流+解密+闯关+直播+爽文)...
  5. java mysql geo_GEO数据库简介
  6. 我们应聘BAT等互联网公司,关于Spring到底需要掌握什么?
  7. 计算机硬盘必内存的容量大,电脑基础知识:内存条的作用
  8. ceph纠删码性能测试
  9. 机器人动力学与控制_快速搭建“机器人动力学-参数辨识-轨迹规划-运动控制”的完整框架...
  10. RK3399平台开发系列讲解(外设篇)3.35、GMAC RGMII Delayline Guide 窗口配置
  11. OC 如何读取plist文件
  12. FMCW激光雷达科普(上):基本概念、技术路线、优势及争议和误解
  13. Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)
  14. HashMap底层——解决Hash冲突(链地址法)
  15. vostro3070装win7_戴尔Vostro 成就 3070台式机装win7系统及bios设置
  16. 微信迎来最新改版,做这几款微信插件提高用户体验!
  17. js-跟着鼠标移动的图片
  18. 这是你的船--读后感
  19. 交换机telnet 华为 华三 中兴 锐捷
  20. Sprint CEO评论乔布斯:所有人都低估了iPhone

热门文章

  1. java抓取页面数据_通过java抓取任何指定网页的数据
  2. 实心球状CdSe/ZnS/硫量子点QD-AFP-Ab/CPV VLP标记抗体/蛋白的制备方法与电镜表征
  3. java风控系统重构
  4. 无法将类型“string”隐式转换为“char
  5. Abbkine 细胞侵袭分析试剂盒,简单方便,快速检测
  6. WiSA协会在2022年CEDIA展会上大放异彩并首次推出最新的多元化沉浸音效产品类别
  7. 教培机构不退费有哪些投诉渠道?中创教育来分享
  8. 初用 IRC freenode
  9. 小程序第三讲 组件间传值 props
  10. bing client id secret_室内设计与装修id+c杂志2020年第11期出版上市