flutter_engine 交叉编译【自定义编译器(最新)】

本文围绕Flutter编译展开,先介绍准备编译环境,包括确定sysroot并备份、创建clang软连接;接着说明编译步骤,如生成ninja编译脚本、进行ninja编译;最后针对编译报错,如找不到依赖、不识别参数等给出解决办法,助力完成Flutter编译。

1. 前言

flutter的下载参考前一篇文章,flutter源码下载
源码下载结束后,最好使用gclient切换stable版本,比较稳定,这样使用自定义编译器修改的缺陷最少。

2. 准备编译环境

2.1 确定sysroot

sysroot是指你的编译器的sysroot,编译器的sysroot可以通过命令打印出来:

arm-linux-gnueabihf-gcc --print-sysroot

到时候编译不过,可能需要在sysroot路径的下的lib中新增内容,这里不建议直接修改sysroot,影响原生编译器运行,所以拷贝一份sysroot进行备份。

cp `arm-linux-gnueabihf-gcc --print-sysroot` ~/sysroot/arm-linux-gnueabihf

如果你的编译器运行 使用参数--print-sysroot没有打印,可以使用 -v找找--sysroot=dir对应的dir,如果还是没有,可以直接找到编译器的安装目录,去查找类似linux根目录(路径下包含bin, lib, usr等目录)的路径。如编译器gcc-linaro-12.0.1-2022.02-x86_64_arm-linux-gnueabihf.tar.gz,我安装在toolchains(相对路径)目录,那么他的sysroot就是:toolchains/gcc-linaro-12.0.1-2022.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc.

2.2 创建clang软连接

直接修改 src/build/toolchain/custom/BUILD.gn最终还是编译不过,使用软连接方式即可
直接修改 src/build/toolchain/custom/BUILD.gn最终还是编译不过,使用软连接方式即可
直接修改 src/build/toolchain/custom/BUILD.gn最终还是编译不过,使用软连接方式即可
要么直接创建clang/clang++的软连接

ln -sf \
toolchains/gcc-linaro-12.0.1-2022.02-x86_64_arm-linux-gnueabih/bin/arm-linux-gnueabihf-gcc \
toolchains/gcc-linaro-12.0.1-2022.02-x86_64_arm-linux-gnueabih/bin/clang

ln -sf \
toolchains/gcc-linaro-12.0.1-2022.02-x86_64_arm-linux-gnueabih/bin/arm-linux-gnueabihf-g++ 
<think>我们面对的问题是在服务器上配置鸿蒙操作系统(HarmonyOS)并搭建Flutter引擎的编译开发环境。这是一个复杂的任务,需要分步骤进行。请注意,鸿蒙系统目前主要支持在物理设备或模拟器上运行,而服务器环境通常是基于x86架构的Linux系统,而鸿蒙系统主要运行在ARM架构上(尤其是OpenHarmony支持多种架构)。因此,我们需要明确: 1. 目标环境:服务器上运行的是Linux(x86或ARM)?如果是x86,我们需要通过模拟或交叉编译的方式来构建ARM架构的鸿蒙应用和Flutter引擎。 2. 鸿蒙系统:我们指的是OpenHarmony(开源版本)还是HarmonyOS(华为的商用版本)?这里我们主要讨论OpenHarmony,因为它是开源的。 3. Flutter引擎:我们需要将Flutter引擎编译成支持OpenHarmony的版本。 由于OpenHarmony本身并不直接提供在服务器上安装的操作系统镜像(它主要面向嵌入式设备和手机等),我们通常是在Linux服务器上搭建OpenHarmony的编译环境,用于交叉编译出OpenHarmony系统镜像和应用程序。同时,我们需要为Flutter引擎添加OpenHarmony的支持并进行编译。 步骤概览: 1. 准备服务器环境:确保服务器是Linux(推荐Ubuntu 20.04或类似版本),并安装必要的依赖。 2. 获取OpenHarmony源代码并搭建编译环境。 3. 为Flutter引擎添加OpenHarmony支持(可能需要修改Flutter引擎代码)。 4. 编译Flutter引擎,生成OpenHarmony平台可用的库。 5. 使用编译好的Flutter引擎构建Flutter应用并运行在OpenHarmony设备或模拟器上。 详细步骤: ### 1. 准备服务器环境 首先,确保服务器是64位Linux系统(如Ubuntu 20.04),并安装以下依赖: ```bash sudo apt update sudo apt install -y git curl python3.8 python3-pip gcc g++ make bison flex texinfo libgmp-dev libmpc-dev libmpfr-dev libexpat-dev libssl-dev libncurses-dev libffi-dev zlib1g-dev libelf-dev libtool ``` 安装Node.js(用于部分构建工具): ```bash curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - sudo apt install -y nodejs ``` 安装hb(OpenHarmony的构建工具): ```bash pip3 install --user ohos-build ``` 将hb工具路径添加到环境变量(假设用户目录为`~`): ```bash echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc source ~/.bashrc ``` ### 2. 获取OpenHarmony源代码并编译 参考OpenHarmony官方文档(以OpenHarmony 3.2 Beta为例): ```bash mkdir openharmony cd openharmony repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.2-Beta --no-repo-verify repo sync -c repo forall -c 'git lfs pull' ``` 然后,配置编译环境(以标准系统为例,如rk3568开发板): ```bash ./build/prebuilts_download.sh hb set # 在出现的界面中选择目标平台,例如:standard hb build ``` 编译过程可能需要较长时间,编译完成后会生成镜像文件,可以烧录到开发板上。 ### 3. 为Flutter引擎添加OpenHarmony支持 Flutter官方尚未支持OpenHarmony,因此需要社区或自行添加支持。目前已有一些开源项目(如[OpenHarmony-SIG/flutter_engine](https://gitee.com/openharmony-sig/flutter_engine))在尝试适配。 步骤: - 克隆Flutter引擎源码(注意分支,例如对应Flutter 3.0的引擎): ```bash git clone https://github.com/flutter/engine.git cd engine git checkout <对应分支> ``` - 应用OpenHarmony支持的补丁(如果有现成的适配项目,可以参考其步骤)。 - 如果没有现成的适配,需要自行修改引擎代码,包括: - 添加OpenHarmony作为目标平台(修改构建系统,添加TOOLCHAIN等)。 - 适配Dart VM在OpenHarmony上的运行。 - 适配Skia图形库在OpenHarmony上的渲染后端(如使用EGL)。 - 适配平台插件(如文本输入、窗口管理、事件等)。 这是一个复杂的过程,需要深入了解Flutter引擎和OpenHarmony系统。 ### 4. 编译Flutter引擎 在修改好引擎代码后,进行编译。编译Flutter引擎需要安装必要的依赖和工具(如depot_tools)。 安装depot_tools: ```bash git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH="$PATH:$(pwd)/depot_tools" ``` 生成构建配置(以release模式为例): ```bash ./tools/gn --runtime-mode=release --target-os=ohos --arm-float-abi=hard --target-cpu=arm --ohos-api-level=8 --ohos-ndk-path=<OpenHarmony SDK路径> --ohos-sysroot=<OpenHarmony SDK中的sysroot路径> ``` 然后进行编译: ```bash ninja -C out/ohos_release ``` 编译成功后,会生成`libflutter.so`等库文件。 ### 5. 使用编译好的Flutter引擎构建Flutter应用 在Flutter应用中,需要指定使用我们编译的引擎。可以通过设置环境变量: ```bash export FLUTTER_ENGINE=<引擎路径>/src export FLUTTER_ROOT=<Flutter SDK路径> ``` 然后,在Flutter项目中,运行: ```bash flutter run --local-engine=ohos_release ``` 注意:这需要Flutter工具链支持OpenHarmony目标。因此,可能还需要修改Flutter工具(`flutter_tools`)以添加OpenHarmony平台。 ### 注意事项 - 整个过程非常复杂,且OpenHarmony和Flutter都在不断更新,可能遇到各种问题。 - 目前社区对Flutter在OpenHarmony上的支持尚不完善,建议关注开源社区(如Gitee上的OpenHarmony-SIG)的最新进展。 - 如果只是想在OpenHarmony上运行Flutter应用,也可以考虑使用已经适配好的第三方解决方案(如[arkui_flutter](https://gitee.com/openharmony-sig/arkui_flutter)),它们提供了预编译的引擎和修改过的Flutter工具链。 ### 引用说明 [^1]: Flutter是由Google开发的开源UI工具包,支持跨平台应用开发。在OpenHarmony上运行Flutter应用需要将Flutter引擎适配到OpenHarmony系统。 [^2]: 日志展示了在鸿蒙设备上安装和运行应用的命令,这些命令对于调试在OpenHarmony上运行的Flutter应用可能有参考价值。 §§相关问题§§ 1. 如何为OpenHarmony交叉编译Flutter引擎? 2. 在OpenHarmony上运行Flutter应用需要哪些步骤? 3. 如何解决在OpenHarmony上编译Flutter引擎时遇到的依赖问题?</think>### 在服务器上配置鸿蒙系统并搭建 Flutter 引擎编译环境 #### 1. **准备鸿蒙开发环境** - **安装依赖工具** 在 Linux 服务器(推荐 Ubuntu 20.04+)安装基础编译工具: ```bash sudo apt update sudo apt install git python3.8 python3-pip curl openjdk-11-jdk pip3 install setuptools ``` - **配置鸿蒙编译工具(hb)** 安装鸿蒙专用构建工具: ```bash pip3 install ohos-build echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc source ~/.bashrc ``` #### 2. **获取鸿蒙源代码** - **下载 OpenHarmony 源码**(以 3.2 Release 为例): ```bash repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.2-Release repo sync -c repo forall -c 'git lfs pull' ``` - **配置设备树**(以模拟器为例): ```bash ./build/prebuilts_download.sh hb set # 选择 `product` -> `qemu-mini-system-demo` ``` #### 3. **编译鸿蒙系统镜像** ```bash hb build # 生成镜像在 out/ohos-arm-release/packages/phone/images/ ``` 编译完成后可通过 QEMU 启动验证: ```bash ./qemu-run -b # 启动鸿蒙模拟器[^1] ``` #### 4. **搭建 Flutter 引擎编译环境** - **安装 Flutter SDK**: ```bash git clone https://github.com/flutter/flutter.git -b stable echo 'export PATH="$PATH:$(pwd)/flutter/bin"' >> ~/.bashrc source ~/.bashrc flutter doctor ``` - **配置鸿蒙平台支持**: 修改 Flutter 引擎代码支持鸿蒙: ```bash cd engine/src git apply ohos_support.patch # 需社区提供的鸿蒙适配补丁 ``` - **编译 Flutter 引擎**: ```bash ./flutter/tools/gn --runtime-mode=release --target-os=ohos --ohos-api-level=8 ninja -C out/ohos_release ``` #### 5. **集成 Flutter 应用到鸿蒙** - **创建 Flutter 鸿蒙项目**: ```dart flutter create --platforms=ohos my_app cd my_app ``` - **构建鸿蒙 HAP 安装包**: ```bash flutter build ohos --target-platform=arm64 ``` - **部署到鸿蒙设备**: ```bash hdc file send build/ohos/release/entry-debug-unsigned.hap /sdcard/ hdc shell bm install -p /sdcard/entry-debug-unsigned.hap # 安装应用[^2] ``` ### 关键注意事项 1. **架构兼容性** 服务器需为 ARM64 架构(或使用交叉编译),x86 服务器需配置 QEMU 虚拟化: ```bash sudo apt install qemu-system-arm ``` 2. **依赖冲突解决** 若遇 Python 版本冲突,使用 `update-alternatives` 管理多版本: ```bash sudo update-alternatives --config python3 ``` 3. **社区资源参考** - OpenHarmony SIG 的 Flutter 适配项目:[gitee.com/openharmony-sig/flutter_engine](https://gitee.com/openharmony-sig/flutter_engine) - 鸿蒙 Flutter 插件模板:[ohos_flutter](https://gitee.com/openharmony-sig/ohos_flutter) ### 验证环境 ```mermaid graph LR A[Ubuntu Server] --> B[OpenHarmony 3.2] B --> C[Flutter Engine] C --> D[QEMU/Real Device] D --> E[Flutter App on HarmonyOS] ``` > **提示**:首次编译 Flutter 引擎需 2-4 小时,建议使用 >=32GB RAM 服务器。完整流程需社区补丁支持,持续关注 [OpenHarmony SIG](https://gitee.com/openharmony-sig) 更新。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值