原因
因为我的软件在使用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、使用 Skia 和 Impeller 日志的差别
如果使用了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()
这段日志对应的命令顺序如下:
flutter run --no-enable-impeller
结果 : 没有使用Impeller引擎特有的输出。flutter run
结果 : 有使用Impeller引擎特有的输出。flutter build apk
将 EnableImpeller 设置为true 结果 : 有使用Impeller引擎特有的输出。flutter build apk
将 EnableImpeller 设置为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引擎