关于排查 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引擎

相关推荐
老前端的功夫21 小时前
前端水印技术深度解析:从基础实现到防破解方案
开发语言·前端·javascript·前端框架
霍格沃兹测试学院-小舟畅学21 小时前
性能测试入门:使用 Playwright 测量关键 Web 性能指标
开发语言·前端·php
tangbin5830851 天前
iOS Swift 工具类:数据转换工具 ParseDataTool
前端
潜水豆1 天前
AI 时代的前端究竟还能积累什么
前端
www_stdio1 天前
手写 instanceof:深入理解 JavaScript 原型与继承机制
前端·javascript·html
boombb1 天前
国际化方案:多环境、多语言、动态加载的完整实践
前端
狗哥哥1 天前
我是如何治理一个混乱的 Pinia 状态管理系统的
前端·vue.js·架构
子春一1 天前
Flutter 测试体系全栈指南:从单元测试到 E2E,打造零缺陷交付流水线
flutter·单元测试·log4j
一 乐1 天前
物业管理|基于SprinBoot+vue的智慧物业管理系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot
测试人社区—52721 天前
你的单元测试真的“单元”吗?
前端·人工智能·git·测试工具·单元测试·自动化·log4j