This is a small Android/Flutter repro app to reproduce flutter 3.44.0 regression: TextureView/OpenGL PlatformView freezes or stays blank on Huawei Android 10 (JNY-LX1)
How rendering is composed:
Flutter PlatformViewLink
-> AndroidViewSurface
-> PlatformViewsService.initSurfaceAndroidView
-> Android PlatformView
-> FrameLayout container
-> TextureView
-> EGL/OpenGL ES render thread
The native Android side renders a continuously rotating colored box into a TextureView. A yellow frame counter is drawn by the same OpenGL renderer in the upper-left corner of the native view. If the Android platform-view presentation path freezes, the box and counter should stop visually even though Android logs may still show frames.
The screen also plays a bundled H.264 clip (assets/test_video.mp4, 1280x720, baseline) with
video_player below the platform view. video_player gets its surface from
TextureRegistry.createSurfaceProducer(), the path that the Huawei fallback from
flutter/flutter#181931 is meant for, while the platform view uses the same method internally.
So one screen shows if an engine change fixes one path and breaks the other.
Result on Huawei JNY-LX1 / Android 10 with Flutter 3.47.5 (2026-10-21):
| Embedding | Platform view | Video |
|---|---|---|
| stock 3.47.5 | frozen on first frames | plays |
| with flutter/flutter#193441 | updates | plays |
| process wide override to ImageReader | updates | fails, ACodec 0xfffffc0e |
MainActivity logs (tag ReproProbe) if the embedding has the #193441 method, and calls the old
process wide setter when an embedding has it.
android/build.gradle.kts can swap the flutter embedding for one published to a local maven
dir, without building the engine:
AAM_EMBEDDING_REPO=/path/to/maven AAM_EMBEDDING_SUFFIX=aam2 flutter build apk --releaseThe repo must hold io.flutter:flutter_embedding_release:1.0.0-<engine hash>-<suffix>. Without
these variables the build uses the stock embedding.