源码编译CEF(branch=6045)+mp4+mp3笔记

接触Chromium已经过去多年了,一直都依赖别人编译的库,最近想自己整一个,所以有了这篇笔记。

环境要求:WIN10,内存16G,固态硬盘空间200G+,VS2022,科学上网(具体配置我这边不需要,我直接使用专线电脑跳板的,可以查看一些网页资料)

第一,最重要的告诫:不要有强迫症。

例如遇到 UnicodeDecodeError: 'gbk' codec can't decode byte 0x92 in position 241: illegal multibyte sequence 不要理它,主要编译不中断,啥提示先放一边。我一直想着让这些烦人的消息去掉,结果加了

set PYTHONLEGACYWINDOWSSTDIO=utf8
set PYTHONIOENCODING=utf8
set PYTHONUTF8=1

chcp 65001

然而没啥用,有时候还会自动中断。有人说这个是中文语言配置问题,可能吧。只要你不管它,不影响编译结果。

第二,如果仅仅开mp4,估计配置上就加这样一行代码就够了。


set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false use_jumbo_build=trueset GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*

其中use_thin_lto=false没有的话,debug版本打包不进来,会中断的。chrome_pgo_phase=0如不关闭这个玩意,可能要修改文件,路径在“chromium\src\build\config\compiler\pgo\pgo.gni”,所以建议使用GN_DEFINES搞定。也有人建议is_component_build=false减少编译,我这里没配置,编译好像蛮久的。

第三,遇到out of memory的中断,如果已经是16G内存的,可以重试几次,如果没法解决,建议重启电脑,然后将其他的程序能关的都关了,重试。如果还是不行,可以在我的电脑-》属性-》高级系统设置-》“高级”页面中性能“设置”,将缓存内存也配置成16G,重启后再来一遍。如果是8G内存的,可能有点问题,只能看运气吧,我观察了一下,在最后link的时候内存飙升到16G的。

第四,如果只编译一个版本,例如x64,只需要编译out目录下的“Debug_GN_x64”,“Release_GN_x64”,“Debug_GN_x64_sandbox”,“Release_GN_x64_sandbox”。其中两个sandbox版本用时比较短,可以先编译的。

ninja -j8 -C out\Release_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x64_sandbox cef_sandbox

我之前也犯错了,使用“ninja -j8 -C out\Release_GN_x64_sandbox cef”结果一直说找不到std的一些函数,其实“**_sandbox”这些目录一定是给cef_sandbox配置的,不要当它cef编译!

另外就是加-j8代表最多可以并发8个clang-cl.exe编译,最好根据自己的电脑配置一下,如果不填的话,应该是满核运行(例如我的电脑12核,就有12个并发,应该是做了检测的),我建议是:不要满核,可以避免卡住和内存崩掉,当然设置后效率没那么高。

最后将配置发一份

这里有两个文件夹 E:\cef\code\depot_tools (需要配置到Path里面) 和 E:\cef\code\chromium_git

一个文件E:\cef\code\automate\automate-git.py,这个玩意在CEF工程里面的(cef\tools\automate)。

在E:\cef\code\chromium_git下建一个update.bat文件,内容如下:

set GN_DEFINES=is_component_build=false
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
python3 ..\automate\automate-git.py --download-dir=E:\cef\code\chromium_git --depot-tools-dir=E:\cef\code\depot_tools --no-distrib --no-build --branch=6045

运行update.bat之后就是漫长的等待,直到完成,其中的艰辛不提也罢。最终在E:\cef\code\chromium_git 目录下会有两个文件夹 cef,chrome。而chrome/src下必须有cef目录,否则就是没下载完成,需要重新运行update.bat.

代码更新完毕就开始魔改一下。这个可以百度一下。我这里抄个简单的。

在GN运行之前(create,bat), 可以修改build_ffmpeg.py,位置大概在chromium\src\third_party\ffmpeg\chromium\scripts;

  原版:
configure_flags['Chrome'].extend(['--enable-decoder=aac,h264','--enable-demuxer=aac','--enable-parser=aac,h264',])
修改:configure_flags['Chrome'].extend(['--enable-decoder=aac,h264,h265,mp3,mpeg4,amrnb,amrwb,flv','--enable-demuxer=aac,mp3,mov,avi,amr,flv','--enable-parser=aac,h264,mpegaudio,mpeg4video,h263,h265',])

貌似这样修改,得到的文件也不支持h265(使用html5test.com测试),如果可以的话,还是在下面的方法配置一下试试(实验时间太久了,我放弃)

在GN运行之后(create,bat)只能修改下面两个目录的h文件。

\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win 和\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win-msvc都改了把。

我只对x64说明,其他的一样修改。

x64\config_components.h 将 x64\config.h

其中x64\config.h将注释掉的FFMPEG_CONFIGURATION重新配置一下;x64\config_components.h则将类似CONFIG_MP3_DECODER设置为1

安装官方的说法是在chrome/src/cef下建议create.bat的。我查看了一下,实际上是运行python文件。所以我create.bat改成这样:


set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome chrome_pgo_phase=0 use_thin_lto=false use_jumbo_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*#call call cef_create_projects.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\gclient_hook.py

然后放到E:\cef\code\chromium_git运行,不要在cef里面运行。

运行完create.bat后,在\chromium\src\out下面得到8个文件夹,例如“Debug_GN_x64”等。

然后CD到\chromium\src目录下,运行下面代码

ninja -j8 -C out\Release_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x64_sandbox cef_sandbox
ninja -j8 -C out\Release_GN_x86_sandbox cef_sandbox
ninja -j8 -C out\Debug_GN_x86_sandbox cef_sandboxninja -j8 -C out/Release_GN_x64 cef
ninja -j8 -C out/Debug_GN_x64 cef
ninja -j8 -C out/Release_GN_x86 cef
ninja -j8 -C out/Debug_GN_x86 cef

Sandbox部分可以优先编译,要一条一条来,没法一次完成,除非独立变成一个bat,然后使用call方法调用。

如果只编译x64,那就挑出一些编译,编译完成后,运行:

set CEF_VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\make_distrib.py --output-dir=E:\cef\code\chromium_git\out\x64 --allow-partial --x64-build --ninja-build

如果是x86,则

set CEF_VCVARS=C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars32.bat
python3 E:\cef\code\chromium_git\chromium\src\cef\tools\make_distrib.py --output-dir=E:\cef\code\chromium_git\out\x86 --allow-partial --ninja-build

最后机器翻译+人工整理了一份MasterBuildQuickStart,可以比对一下我前面的总结 (2023-09-28版)


cef / MasterBuildQuickStart 
https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart#markdown-header-windows-setup此 Wiki 页面提供了使用当前主(开发)分支创建 CEF/Chromium 调试版本的快速入门指南。编辑请注意:未经CEF 论坛或问题跟踪器事先批准而对此 Wiki 页面所做的更改可能会丢失或恢复。概述
文件结构
Windows 设置
Mac OS X 设置
Linux设置
下一步概述
本页面提供了快速入门指南,用于设置最小开发环境并构建 Chromium/CEF 主分支以进行开发。有关可用工具和配置的全面讨论,请访问BranchesAndBuilding Wiki 页面。本指南不适用于:那些寻求在第三方应用程序中使用的预构建二进制发行版的人。去这里吧。
那些寻求以完全自动化的方式构建二进制发行版的人。去这里吧。
开发系统可以使用专用硬件或VMware、Parallels或VirtualBox虚拟机进行配置。除了主分支之外,以下步骤通常可用于开发 CEF/Chromium 的最新版本分支。Chromium 构建要求会随着时间的推移而变化,因此在尝试构建发布分支之前,请先查看BranchesAndBuilding Wiki 页面上列出的构建要求。然后只需添加--branch=XXXX到automate-git.py命令行,其中“XXXX”是您想要构建的分支号。文件结构
所有平台都将使用相同的文件结构。“~”可以是不包含空格或特殊字符的任何路径。我们将在以下部分中为每个平台构建此目录结构。~/code/automate/automate-git.py   <-- CEF build scriptchromium_git/cef/              <-- CEF source checkoutchromium/src/            <-- Chromium source checkoutupdate.[bat|sh]   <-- Bootstrap script for automate-git.pydepot_tools/        <-- Chromium build tools
使用此文件结构,您可以并行开发多个 CEF/Chromium 分支。例如,使用“chromium_git1”而不是“chromium_git”作为目录名称重复以下说明。Windows 设置
需要什么BranchesAndBuilding Wiki 页面上列出的 Windows 构建要求。
按照此处所述安装所需的 Visual Studio 子组件。
安装默认位置中指定的确切 Windows SDK 版本以避免构建问题。
至少 16GB RAM(建议 32GB+)和 150GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南以下所有命令都应使用系统“cmd.exe”运行,而不是使用 Cygwin shell。1. 创建以下目录。c:\code\automate
c:\code\chromium_git
警告:如果更改上述目录名称/位置,请确保 (a) 仅使用 ASCII 字符并 (b) 选择短文件路径(总共少于 35 个字符)。否则,由于文件路径无效或过长,某些工具可能会在构建过程中稍后失败。2. 下载depot_tools.zip(https://chromium.googlesource.com/chromium/tools/depot_tools.git)并解压到“c:\code\depot_tools”。不要使用资源管理器中的拖放或复制粘贴提取,这不会提取隐藏的“.git”文件夹,而该文件夹是 depot_tools 自动更新所需的。不过,您可以从上下文菜单中使用“提取全部...”。7-zip也是一个很好的工具。3. 运行“update_depot_tools.bat”安装Python和Git。cd c:\code\depot_tools
update_depot_tools.bat
4. 将“c:\code\depot_tools”文件夹添加到系统路径中。例如,在 Windows 10 上:运行“系统属性高级”命令。
单击“环境变量...”按钮。
双击“系统变量”下的“路径”以编辑值。5. 将automate-git.py(https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py)脚本下载到“c:\code\automate\automate-git.py”。6. 使用以下内容创建“c:\code\chromium_git\update.bat”脚本。set GN_DEFINES=is_component_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
python3 ..\automate\automate-git.py --download-dir=c:\code\chromium_git --depot-tools-dir=c:\code\depot_tools --no-distrib --no-build
运行“update.bat”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“c:\code\chromium_git\cef”,Chromium源代码将下载到“c:\code\chromium_git\chromium\src”。下载完成后,CEF源代码将被复制到“c:\code\chromium_git\chromium\src\cef”。cd c:\code\chromium_git
update.bat7. 使用以下内容创建“c:\code\chromium_git\chromium\src\cef\create.bat”脚本。set GN_DEFINES=is_component_build=true
set GN_ARGUMENTS=--ide=vs2022 --sln=cef --filters=//cef/*
call cef_create_projects.bat
运行“create.bat”脚本生成 Ninja 和 Visual Studio 项目文件。cd c:\code\chromium_git\chromium\src\cef
create.bat这将生成一个“c:\code\chromium_git\chromium\src\out\Debug_GN_x86\cef.sln”文件,可以在 Visual Studio 中加载该文件以调试和编译单个文件。将此路径中的“x86”替换为“x64”,以使用 64 位构建而不是 32 位构建。始终使用 Ninja 构建完整的项目。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。8. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑“c:\code\chromium_git\chromium\src\cef”处的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。cd c:\code\chromium_git\chromium\src
ninja -C out\Debug_GN_x86 cef将“Debug”替换为“Release”以生成发布版本而不是调试版本。将“x86”替换为“x64”以生成 64 位构建而不是 32 位构建。9. 运行生成的 cefclient 示例应用程序。cd c:\code\chromium_git\chromium\src
out\Debug_GN_x86\cefclient.exe
有关详细的调试说明,请参阅Windows 调试指南。Mac OS X 设置
需要什么BranchesAndBuilding Wiki 页面上列出了 macOS 构建要求。
所有版本都支持在 Intel Mac 上构建。从 M93(4577 分支)开始,支持在 Apple Silicon (ARM64) Mac 上构建。
至少 16GB RAM(建议 32GB+)和 150GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南在此示例中,“~”是“/Users/marshall”。请注意,在某些情况下必须使用绝对路径。本节中描述的环境变量可以添加到“~/.bash_profile”文件中,以在会话中保留它们。1. 创建以下目录。mkdir ~/code
mkdir ~/code/automate
mkdir ~/code/chromium_git2. 使用 Git 下载“~/code/depot_tools”。cd ~/code
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git3. 将“~/code/depot_tools”目录添加到您的 PATH 中。注意这里使用的是绝对路径。export PATH=/Users/marshall/code/depot_tools:$PATH4. 将automate-git.py脚本下载到“~/code/automate/automate-git.py”。5. 使用以下内容创建“~/code/chromium_git/update.sh”脚本。#!/bin/bash
python3 ../automate/automate-git.py --download-dir=/Users/marshall/code/chromium_git --depot-tools-dir=/Users/marshall/code/depot_tools --no-distrib --no-build --x64-build
⚠如果使用 Apple Silicon Mac 而不是 Intel Mac,则替换--x64-build为--arm64-build赋予其可执行权限。cd ~/code/chromium_git
chmod 755 update.sh运行“update.sh”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“~/code/chromium_git/cef”,Chromium源代码将下载到“~/code/chromium_git/chromium/src”。下载完成后,CEF源代码将被复制到“~/code/chromium_git/chromium/src/cef”。cd ~/code/chromium_git
./update.sh6. 运行“~/code/chromium_git/chromium/src/cef/cef_create_projects.sh”脚本创建 Ninja 项目文件。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。cd ~/code/chromium_git/chromium/src/cef
./cef_create_projects.sh⚠ 如果使用 Apple Silicon Mac 而不是 Intel Mac,请在运行前cef_create_projects.sh添加export GN_DEFINES=is_component_build=true.7. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑“~/code/chromium_git/chromium/src/cef”中的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。cd ~/code/chromium_git/chromium/src
ninja -C out/Debug_GN_x64 cef⚠ 如果使用 Apple Silicon Mac 而不是 Intel Mac,请将“x64”替换为“arm64”。将“Debug”替换为“Release”以生成发布版本而不是调试版本。8. 运行生成的 cefclient、cefsimple 和/或 ceftests 示例应用程序。cd ~/code/chromium_git/chromium/src
open out/Debug_GN_x64/cefclient.app
# 或者直接在控制台运行查看日志输出:
./out/Debug_GN_x64/cefclient.app/Contents/MacOS/cefclient有关详细的调试说明,请参阅Mac OS X 调试指南。Linux设置
需要什么BranchesAndBuilding Wiki 页面上列出了 Linux 构建要求。
使用其他版本或发行版构建尚未经过测试,可能会遇到问题。
至少 16GB RAM(推荐 32GB+)和 120GB 可用磁盘空间(用于调试版本)。
使用快速互联网连接 (100Mbps) 和快速构建机器(2.4Ghz、16 个逻辑核心、SSD)大约需要 4 小时。
分步指南在此示例中,“~”是“/home/marshall”。请注意,在某些情况下必须使用绝对路径。本节中描述的环境变量可以添加到“~/.profile”或“~/.bashrc”文件中,以在会话中保留它们。1. 创建以下目录。mkdir ~/code
mkdir ~/code/automate
mkdir ~/code/chromium_git2. 下载并运行“~/code/install-build-deps.py”以安装构建依赖项。对所有问题回答 Y(是)。cd ~/code
sudo apt-get install curl file lsb-release procps python3 python3-pip
curl 'https://chromium.googlesource.com/chromium/src/+/main/build/install-build-deps.py?format=TEXT' | base64 -d > install-build-deps.py
sudo python3 ./install-build-deps.py --no-arm --no-chromeos-fonts --no-nacl
python3 -m pip install dataclasses importlib_metadata3.使用Git下载“~/code/depot_tools”。cd ~/code
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git4. 将“~/code/depot_tools”目录添加到您的 PATH 中。注意这里使用的是绝对路径。export PATH=/home/marshall/code/depot_tools:$PATH5. 下载“~/automate/automate-git.py”脚本。cd ~/code/automate
wget https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py6. 使用以下内容创建“~/code/chromium_git/update.sh”脚本。#!/bin/bash
python3 ../automate/automate-git.py --download-dir=/home/marshall/code/chromium_git --depot-tools-dir=/home/marshall/code/depot_tools --no-distrib --no-build赋予其可执行权限。cd ~/code/chromium_git
chmod 755 update.sh运行“update.sh”脚本并等待 CEF 和 Chromium 源代码下载。CEF源代码将下载到“~/code/chromium_git/cef”,Chromium源代码将下载到“~/code/chromium_git/chromium/src”。下载完成后,CEF源代码将被复制到“~/code/chromium_git/chromium/src/cef”。cd ~/code/chromium_git
./update.sh7. 配置GN_DEFINES您所需的构建环境。Chromium 提供sysroot 映像,以实现跨 Linux 发行版的一致构建。作为上述步骤 6 的一部分,必要的文件将自动下载。如果您不想处理由于与本地安装的软件包或内核版本不兼容而导致的潜在构建损坏,建议使用 Chromium 的 sysroot。要使用 sysroot 映像,请配置以下 GN_DEFINES:export GN_DEFINES="use_sysroot=true use_allocator=none symbol_level=1 is_cfi=false use_thin_lto=false"还可以使用本地安装的软件包而不是提供的 sysroot 进行构建。选择此选项可能需要您进行额外的调试工作才能解决由此产生的任何构建错误。在 Ubuntu 18.04 上,以下 GN_DEFINES 已经过测试可靠工作:export GN_DEFINES="use_sysroot=false use_allocator=none symbol_level=1 is_cfi=false use_thin_lto=false use_vaapi=false"
请注意,使用 sysroot 映像时无法直接构建“cefclient”目标。您可以通过在完成下面的步骤 9 后创建二进制发行版,然后使用该二进制发行版构建 cefclient 目标来解决此限制。您还可以创建AddressSanitizer 版本以增强调试功能。只需添加is_asan=true dcheck_always_on=true到上面列出的 GN_DEFINES 并out/Release_GN_x64在下面的步骤 9 中构建目录即可。asan_symbolize.py按照 AddressSanitizer 链接中所述运行脚本以获取符号化输出。列出的其他各种 GN 参数均基于AutomateBuildSetup Wiki 页面的建议。您可以在 Chromium 源代码中按名称搜索它们以查找更多详细信息。8. 运行“~/code/chromium_git/chromium/src/cef/cef_create_projects.sh”脚本创建 Ninja 项目文件。如果更改项目配置或在 GN 配置(BUILD.gn 文件)中添加/删除文件,请重复此步骤。cd ~/code/chromium_git/chromium/src/cef
./cef_create_projects.sh9. 使用 Ninja 创建 CEF/Chromium 的调试版本。编辑位于“~/code/chromium_git/chromium/src/cef”的 CEF 源代码,并多次重复此步骤以在开发时执行增量构建。请注意,步骤 10 可能需要额外的“chrome_sandbox”目标。只有在步骤 7 中进行设置,“cefclient”目标才会成功构建,use_sysroot=false因此如有必要,请删除该目标。cd ~/code/chromium_git/chromium/src
ninja -C out/Debug_GN_x64 cefclient cefsimple ceftests chrome_sandbox
将“Debug”替换为“Release”以生成发布版本而不是调试版本。10.如果您使用的是较旧的内核 (< 3.8),请设置Linux SUID 沙箱。有关 Linux 沙箱技术的更多背景信息,请参阅此处。# This environment variable should be set at all times.
export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox# This command only needs to be run a single time.
cd ~/code/chromium_git/chromium/src
sudo BUILDTYPE=Debug_GN_x64 ./build/update-linux-sandbox.sh11. 运行 cefclient、cefsimple 和/或 ceftests 示例应用程序。use_sysroot=false请注意,只有在步骤 7 中进行设置后,cefclient 应用程序才会成功构建。cd ~/code/chromium_git/chromium/src
./out/Debug_GN_x64/cefclient有关详细的调试说明,请参阅Linux 调试指南。下一步
如果您正在 Linux 上寻找优秀的代码编辑器,请查看Eclipse和Emacs教程。
查看教程和GeneralUsage Wiki 页面,了解有关 CEF 实施和使用的详细信息。
查看适用于Windows、Mac OS X或Linux的 Chromium 调试指南。
当您准备好将更改贡献回 CEF 项目时,请参阅ContributingWithGit Wiki 页面以获取有关创建拉取请求的说明。
更新2023-09-28

参考链接:

VS2022编译和打包CEF3(+chromium)源码_cef sandbox_o派大猩o的博客-CSDN博客 (windows vs2022 branch=5672)

Linux 编译CEF源码详细记录_cef编译 linux_L-Super的博客-CSDN博客 (linux)

Windows 编译CEF源码详细记录-CSDN博客 (windows 比较详细的问题解决)

cef源码 编译基础_cef源码编译-CSDN博客 (有点旧 vs2017,有些基础知识可以看看)

记录git巨型仓库clone & windows10下cef3编译加入MP3/MP4 branch4389 - 知乎 (更古老一下,参考git的一些用法)

如何编译出cef2623中的cef_sandbox.lib静态库-CSDN博客 (说明了cef_sandbox.lib的合成方向,可以试试)

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

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

相关文章

问题:vue2修改对象属性值,数据改变,但是页面视图不更新

目的&#xff1a;修改对象node的child属性的值&#xff0c;页面响应式变化 问题&#xff1a;数据是变了&#xff0c;但是页面没反应&#xff1b;在页面中用v-if绑定这个值&#xff0c;数据变了&#xff0c;视图也是不更新 错误写法&#xff1a; this.node.child ""…

TF签名上架

TF签名上架是一种通过上架苹果的内测商城TestFlight实现应用分发的技术。app封装打包这种技术相对于上架App Store来说较为宽松&#xff0c;但一般需要等待1-3天甚至更长的审核期。对于大多开发者来说&#xff0c;自行TF上架可能存在较高的驳回率&#xff0c;同时可能面临更漫长…

定时器的使用

目录 前言 正文 1.方法 schedule(TimerTask task, Date time) 的测试 &#xff08;1&#xff09;执行任务的时间晚于当前时间(在未来执行)的效果 &#xff08;2&#xff09;线程TimerThread不销毁的原因 &#xff08;3&#xff09;使用 public void cancel() 方法实现 T…

手写promis(2)-- 链式编程篇

目录 链式编程 处理异常 和普通内容 链式编程---处理返回promise 链式编程---处理重复引用 链式编程--rejected 链式编程--处理padding状态 链式编程 处理异常 和普通内容 1.返回promise实例&#xff1a;在原本then方法里边创建新promise2.获取返回值&#xff1a;把原本…

监控易:IT基础资源监控的解决方案和价值

随着企业业务的不断发展&#xff0c;IT基础资源监控的重要性日益凸显。IT基础资源监控不仅需要对网络、服务器、操作系统等基础设备进行实时监控&#xff0c;还需要对业务应用及安全设备进行全方位的管控。本文将详细介绍监控易运维管理软件对于IT基础资源监控的问题和挑战、解…

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用

近年来&#xff0c;国内外学者在生态系统的敏感性、适应能力和潜在影响等方面开展了大量的生态脆弱性研究&#xff0c;他们普遍将生态脆弱性概念与农牧交错带、喀斯特地区、黄土高原区、流域、城市等相结合&#xff0c;评价不同类型研究区的生态脆弱特征&#xff0c;其研究内容…

Vue和React对比

Vue和React都是流行的前端JavaScript框架&#xff0c;它们有很多相似点和不同点&#xff0c;以下是它们的优缺点。 相似点&#xff1a; 都使用了组件化的开发模式&#xff0c;使得应用程序更易于理解和维护。都支持虚拟DOM&#xff0c;提高了页面重绘性能。都支持模板化编程方…

基于安卓android微信小程序的小型企业人力资源管理系统-人事考勤app

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序运行软件&#xff1a;微信开发者 项目介绍 基于微信小程序的小型企业人力资源管…

C语言基本算法之选择排序

目录 概要&#xff1a; 代码如下 运行结果如下 概要&#xff1a; 它和冒泡排序一样&#xff0c;都是把数组元素按顺序排列&#xff0c;但是方法不同&#xff0c;冒泡排序是把较小值一个一个往后面移&#xff0c;选择排序则是直接找出最小值&#xff0c;可以这个说&#xff…

Python+OpenCV裂缝面积识别系统(部署教程&源码)

1.研究背景与意义 随着科技的不断发展&#xff0c;计算机视觉技术在各个领域中得到了广泛的应用。其中&#xff0c;图像处理是计算机视觉中的一个重要分支&#xff0c;它通过对图像进行数字化处理&#xff0c;提取出其中的有用信息&#xff0c;为后续的分析和应用提供支持。而…

Maven-自定义插件

Maven自定义插件 一、背景二、命名规范三、插件开发四、执行插件1.执行插件2.简化命令行2.1 命令格式为 mvn groupId:artifactId:goal2.2 命令格式为 mvn ${prefix}:goal 五、构建周期执行插件总结参考链接&#xff1a; 一、背景 Maven是由一系列用于执行构建任务的插件和一个…

2023.11.22 -数据仓库

目录 https://blog.csdn.net/m0_49956154/article/details/134320307?spm1001.2014.3001.5501 1经典传统数仓架构 2离线大数据数仓架构 3数据仓库三层 数据运营层,源数据层&#xff08;ODS&#xff09;&#xff08;Operational Data Store&#xff09; 数据仓库层&#…

LeetCode39. Combination Sum

文章目录 一、题目二、题解 一、题目 Given an array of distinct integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order. Th…

新生儿近视:原因、科普和注意事项

引言&#xff1a; 近年来&#xff0c;新生儿近视的发病率逐渐上升&#xff0c;引起了广泛关注。新生儿近视的原因复杂&#xff0c;可能受到遗传、环境和行为等多方面因素的影响。本文将深入解析新生儿近视的原因&#xff0c;提供相关科普知识&#xff0c;并为父母和监护人提供…

线性代数 - 几何原理

目录 序言向量的定义线性组合、张成空间与向量基线性变换和矩阵线性复合变换与矩阵乘法三维空间的线性变换行列式矩阵的秩和逆矩阵维度变换点乘叉乘基变换特征值和特征向量抽象向量空间 序言 欢迎阅读这篇关于线性代数的文章。在这里&#xff0c;我们将从一个全新的角度去探索线…

酒店预订订房小程序源码系统+多酒店入驻 功能齐全 附带完整的搭建教程

随着互联网的快速发展&#xff0c;越来越多的人选择通过在线预订平台预订酒店。为了满足这一需求&#xff0c;我们开发了这个酒店预订订房小程序源码系统。该系统基于先进的云计算技术和大数据分析&#xff0c;旨在为用户提供更加便捷、智能的酒店预订服务。 以下是部分代码示…

排序算法--选择排序

实现逻辑 ① 第一轮从下标为 1 到下标为 n-1 的元素中选取最小值&#xff0c;若小于第一个数&#xff0c;则交换 ② 第二轮从下标为 2 到下标为 n-1 的元素中选取最小值&#xff0c;若小于第二个数&#xff0c;则交换 ③ 依次类推下去…… void print_array(int a[], int n){f…

MySQL 数据库下载

1 最新版 MySQL :: Download MySQL Community Server 2 存档版本(Archived Versions)-历史版本 MySQL :: Download MySQL Community Server (Archived Versions) 3 下载(样例: zip 方式) tip1&#xff1a; 可以下载安装文件的方式&#xff0c;也可以使用压缩包方式&#xff…

es基本语法 (kibana)

#添加 (不添加id默认会生成id) POST /cj/test {"name":"jack","sex":"1","age":12 } #添加 (id为第5个的) POST /cj/test/5 {"name":"jackson","sex":"1","age":12 } #条…

健康饮酒进家庭,国台酒业与碧桂园服务集团达成战略合作

11月19日&#xff0c;碧桂园服务集团与国台酒业集团战略合作发布会暨“健康饮酒进家庭”项目启动仪式在广州举行。 广东省酒类行业协会创会会长朱思旭&#xff0c;广东省酒类行业协会会长彭洪&#xff0c;碧桂园服务集团总裁徐彬淮&#xff0c;碧桂园服务集团酒类业务总经理、广…