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

相关推荐
lichenyang4535 小时前
鸿蒙 MVVM 实战:从 Demo 到工程化,聊聊登录、状态管理与埋点系统设计
前端
IT_陈寒5 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
kyriewen5 小时前
AI生成代码快如闪电,但我修了三个小时——它到底帮了谁?
前端·javascript·ai编程
ayqy贾杰6 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理
Apifox6 小时前
Apifox 5 月更新|Postman 导入优化、Runner 支持非 root 运行、请求代码自动带鉴权
前端·后端·安全
miaowmiaow6 小时前
PSD2Code 近期更新与深度解析:从设计稿到生产级代码的完整技术栈
前端·人工智能·ai编程
Hilaku6 小时前
多标签页并发请求导致 Token 刷新失败?只有 15行代码就能解决 !
前端·javascript·程序员
Nile7 小时前
解密Palantir系列一:4. Ontology 不是哲学
开发语言·前端·javascript
因_崔斯汀7 小时前
ECharts 区域地图可视化实战:以山东地图为例
前端
用户965597361907 小时前
Flutter 遇上 FlutterSkills:让开发效率翻倍的实用技巧
flutter