一个适用于 Linux 嵌入式系统的轻量级 Flutter 引擎嵌入器,无需 X11 或 Wayland。
A light-weight Flutter Engine Embedder for Raspberry Pi. Inspired by https://github.com/chinmaygarde/flutter_from_scratch. Flutter-pi also runs without X11, so you don't need to boot into Raspbian Desktop & have X11 and LXDE load up; just boot into the command-line.
You can now theoretically run every flutter app you want using flutter-pi, including apps using packages & plugins, just that you'd have to build the platform side of the plugins you'd like to use yourself.
The difference between packages and plugins is that packages don't include any native code, they are just pure Dart. Plugins (like the shared_preferences plugin) include platform-specific code.
Although flutter-pi is only tested on a Rasberry Pi 4 2GB, it should work fine on other linux platforms, with the following conditions:
This means flutter-pi won't work on a Pi Zero (only the first one) or Pi 1.
Known working boards:
If you encounter issues running flutter-pi on any of the supported platforms listed above, please report them to me and I'll fix them.
git pull && git checkout origin/master and continue with compiling, step 2.Install the engine-binaries (not required anymore, except when using the old method to build the app bundle, see below)
Follow the instructions in the flutter-engine-binaries-for-arm repo..
More Infoflutter-pi needs flutters icudtl.dat and libflutter_engine.so.{debug,profile,release} at runtime, depending on the runtime mode used.
You actually have two options here:
Install cmake, graphics, system libraries and fonts:
sudo apt install cmake libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev ttf-mscorefonts-installer fontconfig libsystemd-dev libinput-dev libudev-dev libxkbcommon-devIf you want to use the gstreamer video player, install these too:
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-alsalibsystemd is not systemd, it's just an utility library. It provides the event loop and dbus support for flutter-pi.libinput-dev, libudev-dev and libxkbcommon-dev are needed for (touch, mouse, raw keyboard and text) input support.libudev-dev is required, but actual udev is not. Flutter-pi will just open all event devices inside /dev/input (unless overwritten using -i) if udev is not present.gpiod and libgpiod-dev where required in the past, but aren't anymore since the flutter_gpiod plugin will directly access the kernel interface. Update the system fonts.
sudo fc-cachegit clone --recursive https://github.com/ardera/flutter-pi
cd flutter-pimkdir build && cd build
cmake ..
make -j`nproc`sudo make installOpen raspi-config:
sudo raspi-configSwitch to console mode:
System Options -> Boot / Auto Login and select Console or Console (Autologin).
You can skip this if you're on Raspberry Pi 4 with Raspbian Bullseye
Enable the V3D graphics driver:Advanced Options -> GL Driver -> GL (Fake KMS)
Configure the GPU memory
Performance Options -> GPU Memory and enter 64.
Leave raspi-config.
Give the pi permission to use 3D acceleration. (NOTE: potential security hazard. If you don't want to do this, launch flutter-pi using sudo instead.)
usermod -a -G render piFinish and reboot.
omxplayer_video_player plugin.pi isn't allowed to directly access the GPU because IIRC this has some privilege escalation bugs. Raspberry Pi has quite a lot of system-critical, not graphics-related stuff running on the GPU. I read somewhere it's easily possible to gain control of the GPU by writing malicious shaders. From there you can gain control of the CPU and thus the linux kernel. So basically the pi user could escalate privileges and become root just by directly accessing the GPU. But maybe this has already been fixed, I'm not sure.The app must be built on your development machine. Note that you can't use a Raspberry Pi as your development machine.
One-time setup:
flutter pub global activate flutterpi_tool (One time only)flutterpi_tool directly doesn't work, follow https://dart.dev/tools/pub/cmd/pub-global#running-a-script-from-your-path
to add the dart global bin directory to your path.flutter pub global run flutterpi_tool ...Building the app bundle:
cd into your app directory.flutterpi_tool build to build the app.flutterpi_tool build --help gives more usage information.flutterpi_tool build --arch=arm64 --cpu=pi4 --releasersync or scp:rsync (available on linux and macOS or on Windows when using WSL)rsync -a --info=progress2 ./build/flutter_assets/ pi@raspberrypi:/home/pi/my_apps_flutter_assetsscp (available on linux, macOS and Windows)scp -r ./build/flutter_assets/ pi@raspberrypi:/home/pi/my_apps_flutter_assetsExample:
flutter_gallery and deploy it using rsync to a Raspberry Pi 4 in this example.git clone https://github.com/flutter/gallery.git flutter_gallery
cd flutter_gallery
git checkout d77920b4ced4a105ad35659fbe3958800d418fb9
flutter pub get
flutterpi_tool build --release --cpu=pi4
rsync -a ./build/flutter_assets/ pi@raspberrypi:/home/pi/flutter_gallery/On Raspberry Pi, run sudo apt-get install xdg-user-dirs to install the runtime requirement of flutter_gallery. (otherwise it may throw exception)
Done. You can now run this app in release mode using flutter-pi --release /home/pi/flutter_gallery.
Make sure you've installed the flutter SDK. You must use a flutter SDK that's compatible to the installed engine binaries.
If you encounter error messages like Invalid kernel binary format version, Invalid SDK hash or Invalid engine hash:
stable and up to date and your engine binaries are up to date.Open terminal or commandline and cd into your app directory.
flutter build bundle
Deploy the asset bundle to the Raspberry Pi using rsync or scp.
rsync (available on linux and macOS or on Windows when using WSL)rsync -a --info=progress2 ./build/flutter_assets/ pi@raspberrypi:/home/pi/my_apps_flutter_assetsscp (available on linux, macOS and Windows)scp -r ./build/flutter_assets/ pi@raspberrypi:/home/pi/my_apps_flutter_assetsflutter_gallery and deploy it using rsync in this example.git clone https://github.com/flutter/gallery.git flutter_gallery
cd flutter_gallery
git checkout d77920b4ced4a105ad35659fbe3958800d418fb9
flutter build bundle
rsync -a ./build/flutter_assets/ pi@raspberrypi:/home/pi/flutter_gallery/flutter-pi /home/pi/flutter_gallery.暂无开放 Issues,或尚未同步最近议题。