Flutter应用重启后显示白屏且报GL error 0x502问题求助
问题概述
首次运行Flutter应用一切正常,停止项目后再次启动出现白屏,控制台持续抛出GL error 0x502错误;该问题自Android Studio升级至Jellyfish版本后出现,降级到Hedgehog版本仍无法解决;仅清除应用缓存或卸载重装可暂时恢复,但重启项目后问题复现。
控制台错误日志
Launching lib\main.dart on sdk gphone x86 64 in debug mode... Running Gradle task 'assembleDebug'... √ Built build\app\outputs\flutter-apk\app-debug.apk. Debug service listening on ws://127.0.0.1:61880/gf6laqAzYm8=/ws Syncing files to device sdk gphone x86 64... I/le.timesheetapp( 5764): Compiler allocated 4533KB to compile void android.view.ViewRootImpl.performTraversals() [GETX] Instance "DropDownDataController" has been created [GETX] Instance "DropDownDataController" has been initialized [GETX] Instance "GetMaterialController" has been created [GETX] Instance "GetMaterialController" has been initialized E/emuglGLESv2_enc( 5764): device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetUniformLocation:2183 GL error 0x502 E/emuglGLESv2_enc( 5764): device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetUniformLocation:2183 GL error 0x502 ...
解决方案
GL error 0x502代表无效的OpenGL操作,根源是模拟器OpenGL上下文与Flutter缓存冲突,以下是针对性解决方法:
切换模拟器OpenGL渲染模式
打开模拟器设置 → 高级选项,将渲染模式在Hardware - GLES 2.0和Software - GLES 2.0之间切换,保存后重启模拟器再运行项目。部分情况下硬件加速在重启后会出现上下文异常,软件渲染可规避该问题。禁用Flutter增量编译缓存
运行项目时使用命令:flutter run --no-build-cache或先执行彻底清理再运行:
flutter clean && flutter run强制跳过旧缓存的复用,避免OpenGL相关编译残留导致的冲突。
添加Gradle debug构建清理步骤
在android/app/build.gradle的buildTypes中为debug模式添加前置清理任务,确保每次构建都清除中间缓存:android { buildTypes { debug { doFirst { delete fileTree(dir: "$buildDir/intermediates", include: ['**/*']) delete fileTree(dir: "$buildDir/cache", include: ['**/*']) } } } }重置模拟器至出厂状态
在模拟器的更多选项(...)中选择Factory Reset,彻底清除模拟器的系统缓存和应用数据,之后重新运行项目。该操作比单独卸载应用更彻底,能解决模拟器层面的OpenGL上下文残留问题。同步Flutter与Android Studio版本兼容性
运行flutter doctor检查当前环境版本,升级或回退Flutter至稳定版(如最新稳定版或之前无问题的版本),确保Flutter与Android Studio的版本匹配,避免IDE升级后遗留的环境兼容性问题。
内容的提问来源于stack exchange,提问作者flutter developer

