目录
写在前面
一,系统要求
二,安装depot_tools
三,获取代码
四,代码同步
五,代码结构
写在前面
当前的开发背景是基于Google的开源Chromium,来开发Android设备的浏览器方案。
一,系统要求
- 运行 Linux 的 x86-64 计算机,至少配备 8GB RAM。强烈建议配备 16GB 以上 RAM。
- 至少 100GB 的可用磁盘空间。
- 必须已经安装 Git 和 Python。
大多数开发都是在 Ubuntu 上完成的,所以建议最好是在Ubuntu上完成开发环境的搭建。
二,安装depot_tools
克隆depot_tools仓库
:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
添加depot_tools
到 PATH 的末尾(如~/.bashrc
或中~/.zshrc
)。假设克隆depot_tools
到/path/to/depot_tools
export PATH="$PATH:/path/to/depot_tools"
三,获取代码
mkdir ~/chromium && cd ~/chromium
fetch --nohooks android
如果不想获取完整的 repo 历史记录,可以通过添加--no-history参数
来节省fetch的时间
。
即使网络连接良好,fetch命令也需要 30 分钟,而如果网络连接不稳定或速度较慢,可能需要数小时。
fetch
完成后,它将在工作目录中创建一个隐藏.gclient
文件和一个名为的目录src,切换到scr目录下
:
cd src
四,代码同步
fetch过程中可能会发生异常断开,如网络连接问题等,可以使用gclient sync继续同步:
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/bill/.cache/vpython-root.1000/store/cpython+l5fnajrvijf7cvdkjqmbicg3i8/contents/lib/python3.11/shutil.py", line 853, in move
os.rename(src, real_dst)
FileNotFoundError: [Errno 2] No such file or directory: '/home/bill/02_chromium/code/src' -> '/home/bill/02_chromium/code/_bad_scm/srcgi8b4dry/src'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/bill/02_chromium/depot_tools/metrics.py", line 302, in print_notice_and_exit
yield
File "/home/bill/02_chromium/depot_tools/gclient.py", line 4670, in <module>
sys.exit(main(sys.argv[1:]))
^^^^^^^^^^^^^^^^^^
File "/home/bill/02_chromium/depot_tools/gclient.py", line 4656, in main
return dispatcher.execute(OptionParser(), argv)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bill/02_chromium/depot_tools/subcommand.py", line 254, in execute
return command(parser, args[1:])
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bill/02_chromium/depot_tools/gclient.py", line 4009, in CMDsync
ret = client.RunOnDeps('update', args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bill/02_chromium/depot_tools/gclient.py", line 2449, in RunOnDeps
work_queue.flush(revision_overrides,
File "/home/bill/02_chromium/depot_tools/gclient_utils.py", line 1045, in flush
reraise(e[0], e[1], e[2])
File "/home/bill/02_chromium/depot_tools/gclient_utils.py", line 54, in reraise
raise value
File "/home/bill/02_chromium/depot_tools/gclient_utils.py", line 1124, in run
self.item.run(*self.args, **self.kwargs)
File "/home/bill/02_chromium/depot_tools/gclient.py", line 1251, in run
self._got_revision = self._used_scm.RunCommand(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bill/02_chromium/depot_tools/gclient_scm.py", line 137, in RunCommand
return getattr(self, command)(options, args, file_list)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/bill/02_chromium/depot_tools/gclient_scm.py", line 664, in wrapper
return_val = f(*args)
^^^^^^^^
File "/home/bill/02_chromium/depot_tools/gclient_scm.py", line 835, in update
self._DeleteOrMove(options.force)
File "/home/bill/02_chromium/depot_tools/gclient_scm.py", line 209, in _DeleteOrMove
shutil.move(self.checkout_path, dest_path)
File "/home/bill/.cache/vpython-root.1000/store/cpython+l5fnajrvijf7cvdkjqmbicg3i8/contents/lib/python3.11/shutil.py", line 873, in move
copy_function(src, real_dst)
File "/home/bill/.cache/vpython-root.1000/store/cpython+l5fnajrvijf7cvdkjqmbicg3i8/contents/lib/python3.11/shutil.py", line 448, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/home/bill/.cache/vpython-root.1000/store/cpython+l5fnajrvijf7cvdkjqmbicg3i8/contents/lib/python3.11/shutil.py", line 256, in copyfile
with open(src, 'rb') as fsrc:
^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/bill/02_chromium/code/src'
Subprocess failed with return code 1.
bill@MS-OLZZYEYREIDZ:~/02_chromium/code$ fetch --nohooks android
Running: gclient root
Your current directory appears to already contain, or be part of,
a checkout. "fetch" is used only to get new checkouts. Use
"gclient sync" to update existing checkouts.
Fetch also does not yet deal with partial checkouts, so if fetch
failed, delete the checkout and start over (crbug.com/230691).
gclient sync
bill@MS-OLZZYEYREIDZ:~/02_chromium/code$ gclient sync -j8
________ running 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/src.git /home/bill/02_chromium/code/_gclient_src_rutw765q' in '/home/bill/02_chromium/code'
Cloning into '/home/bill/02_chromium/code/_gclient_src_rutw765q'...
remote: Finding sources: 100% (6084/6084)
remote: Total 24630445 (delta 17947971), reused 24628946 (delta 17947971)
Receiving objects: 100% (24630445/24630445), 51.76 GiB | 12.50 MiB/s, done.
Resolving deltas: 100% (17947971/17947971), done.
[1:20:34] Still working on:
[1:20:34] src
[1:20:44] Still working on:
[1:20:44] src
[1:20:54] Still working on:
[1:20:54] src
[1:21:04] Still working on:
[1:21:04] src
1>Syncing projects: 0% ( 0/ 2)
[1:21:10] Still working on:
[1:21:10] src
[1:21:10] Still working on:
[1:21:10] src
Syncing projects: 99% (372/375) src/third_party/dawn/third_party/webgpu-cts
[1:29:56] Still working on:
[1:29:56] src/third_party/chromium-variations
[1:29:56] src/v8
[1:29:56] src/third_party/angle/third_party/VK-GL-CTS/src
[1:29:58] Still working on:
[1:29:58] src/third_party/chromium-variations
[1:29:58] src/v8
[1:29:58] src/third_party/angle/third_party/VK-GL-CTS/src
Syncing projects: 99% (374/375) src/third_party/angle/third_party/VK-GL-CTS/src
[1:31:51] Still working on:
[1:31:51] src/third_party/chromium-variations
[1:32:01] Still working on:
[1:32:01] src/third_party/chromium-variations
[1:32:11] Still working on:
[1:32:11] src/third_party/chromium-variations
[1:32:21] Still working on:
[1:32:21] src/third_party/chromium-variations
[1:32:31] Still working on:
[1:32:31] src/third_party/chromium-variations
[1:32:41] Still working on:
[1:32:41] src/third_party/chromium-variations
[1:32:51] Still working on:
[1:32:51] src/third_party/chromium-variations
[1:33:01] Still working on:
[1:33:01] src/third_party/chromium-variations
[1:33:11] Still working on:
[1:33:11] src/third_party/chromium-variations
[1:33:21] Still working on:
[1:33:21] src/third_party/chromium-variations
[1:33:31] Still working on:
[1:33:31] src/third_party/chromium-variations
[1:33:41] Still working on:
[1:33:41] src/third_party/chromium-variations
[1:33:51] Still working on:
[1:33:51] src/third_party/chromium-variations
[1:34:01] Still working on:
[1:34:01] src/third_party/chromium-variations
[1:34:11] Still working on:
[1:34:11] src/third_party/chromium-variations
[1:34:17] Still working on:
[1:34:17] src/third_party/chromium-variations
Syncing projects: 100% (375/375), done.
Hook 'vpython3 -vpython-spec src/.vpython3 -vpython-tool install' took 46.21 secs
Hook 'python3 src/testing/generate_location_tags.py --out src/testing/location_tags.json' took 30.32 secs
Running hooks: 100% (112/112), done.
五,代码结构
下面是代码同步完成后的代码目录:
bill@MS-OLZZYEYREIDZ:~/02_chromium/code$ ls
_bad_scm src
bill@MS-OLZZYEYREIDZ:~/02_chromium/code/src$ ls
ATL_OWNERS PRESUBMIT_test.py chrome extensions mojo signing_keys
AUTHORS PRESUBMIT_test_mocks.py chromecast fuchsia_web native_client skia
BUILD.gn README.md chromeos gin native_client_sdk sql
CODE_OF_CONDUCT.md WATCHLISTS clank google_apis net storage
CPPLINT.cfg android_webview codelabs gpu out styleguide
CRYPTO_OWNERS apps codereview.settings headless pdf testing
DEPS ash components infra ppapi third_party
DIR_METADATA base content internal printing tools
LICENSE build crypto ios remoting ui
LICENSE.chromium_os build_overrides dbus ios_internal rlz url
OWNERS buildtools device ipc sandbox v8
PRESUBMIT.py cc docs media services webkit