关于排查 Flutter 3.27.0 版本Android端无法禁用Impeller引擎的过程记录

原因

因为我的软件在使用Impeller 会存在问题,所以我必须使用Skia ,之前由于更新到最新版本造成了比较严重的Bug,当时紧急降了版本。但是我发现旧版本Flutter SDK会导致IOS 模拟器非常卡,所以我就升级到了3.27.0版本,因为目前这个版本是最后一个Android和IOS都可以强制使用Skia引擎的版本了。

但是我今天做测试的时候发现,虽然我做了设置,如下:

js 复制代码
<meta-data
    android:name="io.flutter.embedding.android.EnableImpeller"
    android:value="false" />

但是依然会出现和旧版本不一样的表现。

找问题

1、使用 SkiaImpeller 日志的差别

如果使用了Impeller引擎会出现下个这条输出:

I/flutter (29047): [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(60)] Using the Impeller rendering backend (Vulkan).

2、通过adb工具抓取设备的日志

adb命令如下:

adb logcat | findstr /C:"Impeller"

我下面贴一下整段输出:

js 复制代码
adb logcat | findstr /C:"Impeller"

08-22 19:21:33.070 1168 1341 I SurfaceFlinger: onHandleDestroyed: name=ImpellerSurface#6009, layerId=6009, parentId=0

08-22 19:21:33.927 1168 1168 I BufferQueueDebug: [ImpellerSurface#6009](this:0xb400007b983bf9e0,id:-1,api:0,p:-1,c:1168) onDestructor()

08-22 19:22:16.522 28878 28878 I flutter : [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(60)] Using the Impeller rendering backend (Vulkan).

08-22 19:22:16.645 1168 1308 D OplusLayer: setProcInfo (6038,ImpellerSurface#6038,com.example.pixel,0xE719F5D5)

08-22 19:22:26.343 1168 1347 I SurfaceFlinger: onHandleDestroyed: name=ImpellerSurface#6038, layerId=6038, parentId=0

08-22 19:22:27.243 1168 1168 I BufferQueueDebug: [ImpellerSurface#6038](this:0xb400007b94e5e9e0,id:-1,api:0,p:-1,c:1168) onDestructor()

08-22 19:22:45.181 29047 29047 I flutter : [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(60)] Using the Impeller rendering backend (Vulkan).

08-22 19:22:45.307 1168 1308 D OplusLayer: setProcInfo (6067,ImpellerSurface#6067,com.example.pixel,0xE719F5D5)

08-22 19:22:50.146 1168 1308 I SurfaceFlinger: onHandleDestroyed: name=ImpellerSurface#6067, layerId=6067, parentId=0

08-22 19:22:51.000 1168 1168 I BufferQueueDebug: [ImpellerSurface#6067](this:0xb400007b94e709e0,id:-1,api:0,p:-1,c:1168) onDestructor()

08-22 19:23:49.474 30314 30314 I flutter : [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(60)] Using the Impeller rendering backend (Vulkan).

08-22 19:23:49.549 1168 1341 D OplusLayer: setProcInfo (6234,ImpellerSurface#6234,com.example.pixel,0xE719F5D5)

08-22 19:23:53.749 1168 1168 I BufferQueueProducer: [ImpellerSurface#6234](this:0xb400007b907da9e0,id:-1,api:0,p:-1,c:1168) queueBuffer: fps=9.40 dur=4150.24 max=3349.90 min=0.01

08-22 19:23:56.766 1168 1168 I BufferQueueProducer: [ImpellerSurface#6234](this:0xb400007b907da9e0,id:-1,api:0,p:-1,c:1168) queueBuffer: fps=0.66 dur=3017.22 max=2083.62 min=933.59

08-22 19:23:59.445 1168 1307 I SurfaceFlinger: onHandleDestroyed: name=ImpellerSurface#6234, layerId=6234, parentId=0

08-22 19:23:59.450 1168 1168 I BufferQueueDebug: [ImpellerSurface#6234](this:0xb400007b907da9e0,id:-1,api:0,p:-1,c:1168) onDestructor()

08-22 19:24:02.700 30464 30464 I flutter : [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(60)] Using the Impeller rendering backend (Vulkan).

08-22 19:24:02.756 1168 1307 D OplusLayer: setProcInfo (6283,ImpellerSurface#6283,com.example.pixel,0xE719F5D5)

08-22 19:24:07.691 1168 1168 I BufferQueueProducer: [ImpellerSurface#6283](this:0xb400007b9435c9e0,id:-1,api:0,p:-1,c:1168) queueBuffer: fps=8.16 dur=4899.96 max=4091.56 min=0.02

08-22 19:25:24.928 1168 1308 I SurfaceFlinger: onHandleDestroyed: name=ImpellerSurface#6283, layerId=6283, parentId=0

08-22 19:25:24.933 1168 1168 I BufferQueueDebug: [ImpellerSurface#6283](this:0xb400007b9435c9e0,id:-1,api:0,p:-1,c:1168) onDestructor()

08-22 19:25:34.749 30935 30935 I flutter : [IMPORTANT:flutter/shell/platform/android/android_context_vk_impeller.cc(60)] Using the Impeller rendering backend (Vulkan).

08-22 19:25:34.808 1168 1332 D OplusLayer: setProcInfo (6407,ImpellerSurface#6407,com.example.pixel,0xE719F5D5)

08-22 19:25:37.183 1168 1168 I BufferQueueProducer: [ImpellerSurface#6407](this:0xb400007b943479e0,id:-1,api:0,p:-1,c:1168) queueBuffer: fps=15.91 dur=2325.09 max=1524.92 min=0.01

08-22 19:25:38.454 1168 1332 I SurfaceFlinger: onHandleDestroyed: name=ImpellerSurface#6407, layerId=6407, parentId=0

08-22 19:25:38.458 1168 1168 I BufferQueueDebug: [ImpellerSurface#6407](this:0xb400007b943479e0,id:-1,api:0,p:-1,c:1168) onDestructor()

这段日志对应的命令顺序如下:

  1. flutter run --no-enable-impeller 结果 : 没有使用Impeller引擎特有的输出。
  2. flutter run 结果 : 有使用Impeller引擎特有的输出。
  3. flutter build apkEnableImpeller 设置为true 结果 : 有使用Impeller引擎特有的输出。
  4. flutter build apkEnableImpeller 设置为false 结果 : 有使用Impeller引擎特有的输出。

结论

Flutter 3.27.0 版本 Android 端 使用flutter build apk打包无法通过在AndroidManifest.xml文件中写入

js 复制代码
<meta-data
    android:name="io.flutter.embedding.android.EnableImpeller"
    android:value="false" />

禁用Impeller引擎

相关推荐
zzjyr3 小时前
@umijs/max 中导出的 request 方法,如何实现 GET/POST/PUT/DELETE 这四种核心请求
前端
swipe3 小时前
#用这 9 个浏览器 API,我把页面从“卡成 PPT”救回到 90+(每个都有能直接抄的例子)
前端·javascript·面试
zzjyr3 小时前
基于 @umijs/max 的 request 补充常见错误统一处理、请求取消、重复请求防抖的完整方案
前端
拖拉斯旋风4 小时前
深入浅出 RAG:从网页爬取到智能问答的完整链路解析
前端
Mintopia4 小时前
Vite 发展现状与回顾:从“极致开发体验”到生态基础设施
前端
前端双越老师4 小时前
前端面试常见的 10 个场景题
前端·面试·求职
孟祥_成都5 小时前
【全网最通俗!新手到AI全栈开发必读】 AI 是如何进化到大模型的
前端·人工智能·全栈
牛奶5 小时前
AI辅助开发的基础概念
前端·人工智能·ai编程
摸鱼的春哥5 小时前
Agent教程15:认识LangChain,Agent框架的王(上)
前端·javascript·后端
明月_清风6 小时前
自定义右键菜单:在项目里实现“选中文字即刻生成新提示”
前端·javascript