⚠️ 此代码仓已归档。新地址请访问 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程序。
构建基础环境:可参照官网;
需要安装的基础库:
sudo apt install python3
sudo apt install pkg-config
sudo apt install ninja-build
配置node:下载 node
并解压,且配置到环境变量中:
# nodejs
export NODE_HOME=/home/<user>/env/node-v14.19.1-linux-x64
export PATH=$NODE_HOME/bin:$PATH
Windows构建环境: 可参考官网 "Compiling for Windows" 章节搭建Windows构建环境
配置文件:创建空文件夹engine,engine内新建.gclient文件,编辑文件:
solutions = [
{
"managed": False,
"name": "src/flutter",
"url": "git@gitee.com:openharmony-sig/flutter_engine.git",
"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。
更新代码:在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和mac、linux对换行符处理方式不同,在应用dart补丁时会造成dart vm snapshot hash结果不同,可通过以下方法获取当前snapshot hash值
MediaQuery组件暂不支持displayFeatureType和displayFeatureState信息
python xxx/src/third_party/dart/tools/make_version.py --format='{{SNAPSHOT_HASH}}'
其中xxx为创建的engine路径
如果获取到的值不是“8af474944053df1f0a3be6e6165fa7cf”那么就需要检查xxx/src/third_party/dart/runtime/vm/dart.cc文件和xxx/src/third_party/dart/runtime/vm/image_snapshot.cc文件中全部行的结尾是不是以LF结尾的,windows可以使用notepad++查看,其它系统具体方法请自行查询
编辑shell/platform/ohos/flutter_embedding/local.properties:
sdk.dir=<OpenHarmony的sdk目录>
nodejs.dir=<nodejs的sdk目录>
你需要从编译后的 engine
目录中,复制文件到 shell/platform/ohos/flutter_embedding/flutter/libs/arm64-v8a/
libflutter.so
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
获得 har 文件后,按 flutter.har.BUILD_TYPE.API
格式重命名文件,其中BUILD_TYPE
指debug
、release
、profile
,API
指当前 SDK 版本,如 api11 就是 11;比如当前构建的是 api11 的 debug 版本,则重命名为 flutter.har.debug.11
;
替换 flutter_flutter/packages/flutter_tools/templates/app_shared/ohos.tmpl/har/har_product.tmpl/
目录下对应文件,重新运行项目工程即可生效。
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文件。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。