flutter-elinux 编译linux arm64程序

flutter嵌入式系列


文章目录


前言

flutter是可以在嵌入式linux中运行的。官方的flutter sdk可以生成基于x11 gtk的arm64程序。使用第三方sdk,flutter-elinux则可以生成x11、wayland、gbm、eglstream的arm64程序。flutter-elinux提供完整的依赖库,不需要自己生成engine、embedded。只需要:flutter-elinux+clang+sysroot,即可以生成flutter arm64程序。


一、安装flutter-elinux

参考https://github.com/sony/flutter-elinux.git

bash 复制代码
git clone https://github.com/sony/flutter-elinux.git
sudo mv flutter-elinux /opt/
export PATH=$PATH:/opt/flutter-elinux/bin

安装必要的工具

bash 复制代码
sudo apt install unzip curl clang cmake pkg-config

ubuntu 18.04可能需要安装新版本git:《Ubuntu使用ppa源安装最新版git》,编译可能需要新版本cmake:ubuntu安装新版本cmake


二、本机编译运行

具体可以参考https://github.com/sony/flutter-elinux.git

本机为Ubuntu的情况。

1、调试运行

如下代码是创建一个sample项目,并以wayland后端方式运行。

注:需要有对应的backend支持,比如elinux-wayland需要运行weston。elinux-x11需要运行x11。

bash 复制代码
flutter-elinux create sample
cd sample
flutter-elinux run -d elinux-wayland

2、生成

注:需要有对应的backend支持,比如wayland需要运行weston。x11需要运行x11,gbm需要drm支持,eglstream需要NVIDIA支持。

安装需要的包

bash 复制代码
sudo apt update
sudo apt install clang cmake build-essential \
            pkg-config libegl1-mesa-dev \
            libxkbcommon-dev libgles2-mesa-dev
sudo apt install libwayland-dev wayland-protocols
sudo apt install libdrm-dev libgbm-dev libinput-dev libudev-dev libsystemd-dev
bash 复制代码
flutter-elinux create sample
cd sample
flutter-elinux build elinux --target-backend-type=gbm --release

三、交叉编译

主机为Ubuntu x64

参考https://github.com/sony/flutter-elinux/wiki/Building-flutter-apps的Case 1

因为上述链接已经讲的很详细,本文不再赘述,只给出遇到问题的解决方案。

1、docker run 缺少镜像

需要先运行。

bash 复制代码
docker pull arm64v8/ubuntu:18.04

2、docker run 警告且无法进入bash

ubuntu22.04 不会出现,ubuntu18.04会有此问题。按照下列方式运行。

bash 复制代码
docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/ubuntu:18.04

3、编译缺少libfontconfig

重新进入docker中安装,然后重新拷贝sysroot

找到之前的容器ID

bash 复制代码
sudo docker ps -a
bash 复制代码
docker exec it [容器ID] bash
apt install libfontconfig
exit

四、运行

架构为arm64、release模式生成的代码在build/elinux/arm64/release/bundle

本机的可以直接运行,交叉编译的只需将bundle目录拷贝到目标机器上。

运行

bash 复制代码
./sample -b .

注:直接运行可以查看所有参数

bash 复制代码
./sample

总结

以上就是今天讲述的内容,flutter编译嵌入式arm64程序探索过程比较艰辛,尤其是容易被误导需要生成flutter的engine和embedded,这部分工作量很大,但是并没有作用。除非有特殊需求,正常情况使用预编译的so即可。整个编译过程只需要flutter-elinux,不需要额外的工具链,完全参考wiki即可。本文的作用只是作为一个指引,以及给出一些小问题的解决方案。

相关推荐
Tim_Van几秒前
在 CentOS 7 中安装 Chromium 的完整步骤
linux·运维·chrome·centos
2023自学中17 分钟前
C++ 内存追踪器
linux·c++
啵啵鱼爱吃小猫咪2 小时前
Ubuntu 20.04 + ROS Noetic 源码安装 libfranka 0.8.0 和 franka_ros 0.8.0 完整教程
linux·运维·ubuntu
ZZZMMM.zip2 小时前
基于鸿蒙HarmonyOS NEXT开发AI英语口语应用:智能口语练习新体验与鸿蒙Flutter框架跨端实
人工智能·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
ljs6482739513 小时前
Linux运维实操:vi编辑器永久配置静态IP(CentOS系列)
linux·运维·编辑器
dddwjzx3 小时前
嵌入式Linux C应用编程入门——高级I/O
linux·嵌入式
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:白噪音场景的视觉设计
学习·flutter·华为·harmonyos
心中有国也有家3 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的完整生命周期
学习·flutter·华为·harmonyos
Waay4 小时前
Linux 三个核心环境变量配置文件、作用域、生效方式完整梳理
linux·运维·学习·云原生·容器
星空语4 小时前
音频001_Android+Linux车载/手机音频全链路分层架构图
android·linux·音视频