同步操作将从 OpenHarmony-SIG/flutter_engine 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
⚠️ 此代码仓已归档。新地址请访问 flutter_engine。| ⚠️ This repository has been archived. For the new address, please visit flutter_engine.
原始仓来源:https://github.com/flutter/engine
本仓库是基于flutter官方engine仓库拓展,可构建支持在OpenHarmony设备上运行的flutter engine程序。
DEPS
配置文件中 allowed_hosts
字段的URL列表。构建基础环境:可参照官网;
a) 需要安装的工具: git
, curl
and unzip
b) 克隆 gclient
与 gn
构建工具的代码仓库
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
添加 depot_tools
到 PATH
环境变量中
export PATH=/home/<user>/depot_tools:$PATH
c) 需要安装的基础库:
sudo apt install python3
sudo apt install pkg-config
sudo apt install ninja-build
Windows构建环境: 可参考官网 "Compiling for Windows" 章节搭建Windows构建环境
配置文件:
a) 创建名为 engine
的空目录
b) 在 engine
目录内新建 .gclient
文件
c) 编辑 .gclient
文件:
solutions = [
{
"managed": False,
"name": "src/flutter",
"url": "git@gitee.com:harmonycommando_flutter/flutter_engine.git@oh-3.22.0",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
},
]
同步代码:在 engine
目录中执行 gclient sync
命令;这里会同步engine源码、官方packages仓,还有执行ohos_setup任务;
下载sdk: 从鸿蒙SDK下载配套开发工具,暂不支持非该渠道下载的套件
# 需要设置的环境变量: HarmonyOS SDK, ohpm, hvigor, node
export TOOL_HOME=/Applications/DevEco-Studio.app/Contents # mac环境
export DEVECO_SDK_HOME=$TOOL_HOME/sdk # command-line-tools/sdk
export PATH=$TOOL_HOME/tools/ohpm/bin:$PATH # command-line-tools/ohpm/bin
export PATH=$TOOL_HOME/tools/hvigor/bin:$PATH # command-line-tools/ hvigor/bin
export PATH=$TOOL_HOME/tools/node/bin:$PATH # command-line-tools/tool/node/bin
开始构建:在 engine
目录,执行./ohos
,即可开始构建支持ohos设备的flutter engine。
从3.22.0版本开始,engine编译会默认编译local-engine以及local-host-engine, sdk在指定本地编译产物时需要同时指定这两个编译产物,例如:
flutter build hap --target-platform ohos-arm64 --release --local-engine=<DIR>/engine/src/out/ohos_release_arm64/ --local-engine-host=<DIR>//engine/src/out/host_release
更新代码:在 engine
目录,执行./ohos -b master
运行项目工程报 Member notfound:'isOhos'
的错误:请确保src/third_party/dart目录下应用了所有的dart patch(补丁位于src/flutter/attachment/repos目录,可使用git apply应用patch)应用patch后重新编译engine
提示Permission denied:
执行 chmod +x <脚本文件>
添加执行权限
单独编译 debug/release/profile
模式的engine:./ohos -t debug|release|profile
查看帮助:./ohos -h
由于Windows和MacOS、Linux对换行符处理方式不同,在应用dart补丁时会造成dart vm snapshot hash结果不同,可通过以下方法获取当前snapshot hash值
python engine/src/third_party/dart/tools/make_version.py --format='{{SNAPSHOT_HASH}}'
如果获取到的值不是“8af474944053df1f0a3be6e6165fa7cf”那么就需要检查 engine/src/third_party/dart/runtime/vm/dart.cc
文件和 engine/src/third_party/dart/runtime/vm/image_snapshot.cc
文件中全部行的结尾是不是以LF结尾的,Windows可以使用notepad++查看,其它系统具体方法请自行查询
修改了embedding层代码,运行./ohos没有生效,需要将任意cpp层文件修改一下时间戳,编译系统才可以识别(例如任意cpp文件添加空格保存后再删除空格后保存),重新执行则可以触发embedding层重新打包
手动重新应用patch的方法:
python engine/src/flutter/attachment/scripts/ohos_reverse_patch.py
python engine/src/flutter/attachment/scripts/ohos_setup.py
配置代码自动跳转
推荐使用vscode+clangd(与C/C++ IntelliSense有冲突)插件 可参考配置:
"clangd.path": "./src/flutter/buildtools/linux-x64/clang/bin/clangd",
"clangd.arguments": [
"--compile-commands-dir=./src/out/ohos_release_arm64/",
"--query-driver=./src/flutter/buildtools/linux-x64/clang/bin/clang++",
],
"C_Cpp.intelliSenseEngine": "disabled",
Windows下gclient sync报错
关键报错信息'A required privilege is not held by the client'
解决方案:设置->开发者选项->开启"开发人员模式"
编辑 shell/platform/ohos/flutter_embedding/local.properties
:
sdk.dir=<OpenHarmony的sdk目录>
nodejs.dir=<nodejs的sdk目录>
你需要复制文件到 shell/platform/ohos/flutter_embedding/flutter/libs/arm64-v8a/
debug/release
,复制 libflutter.so
profile
,复制 libflutter.so
和 libvmservice_snapshot.so
在 shell/platform/ohos/flutter_embedding
目录下,执行
# buildMode可选值为: debug release profile
hvigorw --mode module -p module=flutter@default -p product=default -p buildMode=debug assembleHar --no-daemon
har
文件输出路径为:shell/platform/ohos/flutter_embedding/flutter/build/default/outputs/default/flutter.har
ps:如果你使用的是DevEco Studio的Beta版本,编译工程时遇到“must have required property 'compatibleSdkVersion', location: build-profile.json5:17:11"错误,请参考《DevEco Studio环境配置指导.docx》中的‘6 创建工程和运行Hello World’【配置插件】章节修改 shell/platform/ohos/flutter_embedding/hvigor/hvigor-config.json5
文件。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。