树莓派4构建Flutter应用遇SkSL编译失败问题求助
问题描述
- 设备:树莓派,系统镜像为2022-09-22-raspios-bullseye-arm64.img.xz
- 系统内核信息:
Linux raspberrypi 5.15.61-v8+ #1579 SMP PREEMPT Fri Aug 26 11:16:44 BST 2022 aarch64 GNU/Linux
操作步骤
执行命令创建Flutter项目:
pi@raspberrypi:~ $ flutter create my_app Building flutter tool... Waiting for another flutter command to release the startup lock... Creating project my_app... Running "flutter pub get" in my_app... Resolving dependencies in my_app... (3.0s) + async 2.10.0 + boolean_selector 2.1.1 + characters 1.2.1 + clock 1.1.1 + collection 1.17.0 + cupertino_icons 1.0.5 + fake_async 1.3.1 + flutter 0.0.0 from sdk flutter + flutter_lints 2.0.1 + flutter_test 0.0.0 from sdk flutter + js 0.6.6 + lints 2.0.1 + matcher 0.12.14 + material_color_utilities 0.2.0 + meta 1.8.0 + path 1.8.3 + sky_engine 0.0.99 from sdk flutter + source_span 1.9.1 + stack_trace 1.11.0 + stream_channel 2.1.1 + string_scanner 1.2.0 + term_glyph 1.2.1 + test_api 0.4.17 + vector_math 2.1.4 Changed 24 dependencies in my_app! Wrote 129 files. All done! You can find general documentation for Flutter at: https://docs.flutter.dev/ Detailed API documentation is available at: https://api.flutter.dev/ If you prefer video documentation, consider: https://www.youtube.com/c/flutterdev
运行错误
执行flutter run时出现以下错误:
pi@raspberrypi:~/my_app $ flutter run Launching lib/main.dart on Linux in debug mode... ERROR: Compilation to SkSL failed. /home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag: warning: (version, profile) forced to be (460, core), while in source code it is (320, es) /home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag:9: error: '#include' : Included file not found. for header name: flutter/runtime_effect.glsl /home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag:93: error: 'FlutterFragCoord' : no matching overloaded function found /home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag:93: error: '=' : cannot convert from ' const float' to ' temp 2-component vector of float' ERROR: Target debug_bundle_linux-arm64_assets failed: ShaderCompilerException: Shader compilation of "/home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag" to "/home/pi/my_app/build/flutter_assets/shaders/ink_sparkle.frag" failed with exit code 1. /home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag: warning: (version, profile) forced to be (460, core), while in source code it is (320, es) /home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag:9: error: '#include' : Included file not found. for header name: flutter/runtime_effect.glsl /home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag:93: error: 'FlutterFragCoord' : no matching overloaded function found /home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag:93: error: '=' : cannot convert from ' const float' to ' temp 2-component vector of float' Building Linux application... Exception: Build process failed
Flutter环境信息
pi@raspberrypi:~/my_app $ flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel master, 3.7.0-13.0.pre.31, on Debian GNU/Linux 11 (bullseye) 5.15.61-v8+, locale en_GB.UTF-8) [✗] Android toolchain - develop for Android devices ✗ Unable to locate Android SDK. Install Android Studio from: https://developer.android.com/studio/index.html On first launch it will assist you in installing the Android SDK components. (or visit https://flutter.dev/docs/get-started/install/linux#android-setup for detailed instructions). If the Android SDK has been installed to a custom location, please use `flutter config --android-sdk` to update to that location. [✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome) ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable. [✓] Linux toolchain - develop for Linux desktop [!] Android Studio (not installed) [✓] Connected device (1 available) [✓] HTTP Host Availability ! Doctor found issues in 3 categories.
解决方案
这个错误源于Flutter master分支的Shader编译器在ARM64架构树莓派上的兼容性问题,可尝试以下几种解决办法:
方法1:切换到Flutter稳定分支
当前使用的master分支包含未稳定的新特性,易出现兼容性问题,切换到稳定分支:
flutter channel stable flutter upgrade
之后重新运行flutter run尝试启动应用。
方法2:禁用SkSL编译优化
临时跳过Shader的SkSL预编译过程,运行命令时添加参数:
flutter run --no-enable-skshader-warmup
方法3:更新系统图形驱动
确保树莓派安装最新Mesa图形驱动,更新系统依赖:
sudo apt update && sudo apt upgrade -y sudo apt install mesa-utils libgl1-mesa-glx
更新完成后重启树莓派,再尝试运行应用。
方法4:手动修改Shader文件(临时应急方案)
若上述方法无效,可手动修改报错的Shader文件,但后续SDK升级会覆盖修改,需谨慎操作:
- 打开
/home/pi/snap/flutter/common/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.frag - 将第9行的
#include <flutter/runtime_effect.glsl>替换为Flutter SDK中flutter/lib/src/runtime目录下runtime_effect.glsl的实际内容 - 修复第93行
FlutterFragCoord的参数类型匹配问题
内容的提问来源于stack exchange,提问作者Jaime Roman
相关产品推荐
相关产品推荐

