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

相关推荐
程序员黑豆2 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
bugcome_com5 小时前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
To_OC5 小时前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
独泪了无痕5 小时前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
Fluxart.ai8 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
why技术8 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端
愚公搬代码8 小时前
【愚公系列】《Android应用案例开发大全》016-LBS类应用掌上杭州(辅助工具类的开发)
android·前端
CodeSheep8 小时前
又一个华为天才少年,离职了!
前端·后端·程序员
GitLqr8 小时前
Flutter 3.47 与 Dart 3.13:你必须了解的迁移指南
flutter·ios·dart
kyriewen9 小时前
面试官说"打开你的AI工具"——我才发现,他考的根本不是写代码
前端·人工智能·面试