Skip to content

Android WebView stops updating on Huawei devices with texture layer composition #196048

Open

Description

@Aulig

Steps to reproduce

Tested with Flutter 3.47.8, webview_flutter 4.13.1 and webview_flutter_android 4.10.13, on MED-LX2 (Huawei P30 Lite in Huaweis Cloud Testing environment) running Android 10 / EMUI 10.1.0.162 and Huawei WebView 10.0.0.308.

  1. Extract the attached sample project and open its directory.
  2. Run flutter pub get.
  3. Run flutter run --release on the affected device.
  4. Tap Show second page. Relaunch and repeat if it renders correctly.

Expected results

The yellow first page is replaced by the green second page.

Actual results

The Flutter button updates and onPageFinished fires, but the WebView keeps showing the yellow first page.

The default Android WebView mode, Texture Layer Hybrid Composition, renders the native WebView into a texture that Flutter displays. Switching to hybrid composition with --dart-define=HYBRID_COMPOSITION=true makes the green page appear.

The failure is triggered by the Huawei fallback in FlutterRenderer.createSurfaceProducer(). Its !hasAndroidHardwareBufferDefect() condition selects SurfaceTextureSurfaceProducer on Huawei API 29. Bypassing that condition to select ImageReaderSurfaceProducer achieves the expected result. Producer selection · Huawei check

Using Hybrid composition for the webview also works as a workaround.

The condition causing the problem came from the video playback fix for #166481.

Code sample

Code sample
import "package:flutter/material.dart";
import "package:webview_flutter/webview_flutter.dart";
import "package:webview_flutter_android/webview_flutter_android.dart";

void main() {
  runApp(const MaterialApp(home: WebViewRepro()));
}

class WebViewRepro extends StatefulWidget {
  const WebViewRepro({super.key});

  @override
  State<WebViewRepro> createState() => _WebViewReproState();
}

class _WebViewReproState extends State<WebViewRepro> {
  static const hybridComposition = bool.fromEnvironment("HYBRID_COMPOSITION");

  late final WebViewController _controller;
  bool _showSecondPage = false;

  @override
  void initState() {
    super.initState();
    _controller = WebViewController()
      ..setNavigationDelegate(
        NavigationDelegate(
          onPageFinished: (_) {
            debugPrint("WebView finished loading");
          },
        ),
      )
      ..loadHtmlString(_firstPage);
  }

  static const _firstPage = """
<!doctype html>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>First page</title>
<body style="background: #ffda80; color: black">
  <h1>First WebView page</h1>
</body>
""";

  static const _secondPage = """
<!doctype html>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Second page</title>
<body style="background: #98dfaf; color: black">
  <h1>Second WebView page</h1>
</body>
""";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("WebView surface repro")),
      body: Column(
        children: [
          ElevatedButton(
            onPressed: () {
              setState(() {
                _showSecondPage = !_showSecondPage;
              });
              _controller.loadHtmlString(_showSecondPage ? _secondPage : _firstPage);
            },
            child: Text(_showSecondPage ? "Show first page" : "Show second page"),
          ),
          Expanded(
            child: WebViewWidget.fromPlatformCreationParams(
              params: AndroidWebViewWidgetCreationParams(
                controller: _controller.platform,
                displayWithHybridComposition: hybridComposition,
              ),
            ),
          ),
        ],
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration Image

Logs

Logs
11-05 12:38:27.295 I/i_webview_repr(21901): Reinit property: dalvik.vm.checkjni= false
11-05 12:38:27.295 I/i_webview_repr(21901): ReInitProperties: persist.vm.debug.dumpapi= false
11-05 12:38:27.297 E/i_webview_repr(21901): Not starting debugger since process cannot load the jdwp agent.
11-05 12:38:27.337 I/HwFrameworkSecurityPartsFactory(21901): add HwFrameworkSecurityPartsFactory to memory.
11-05 12:38:27.338 E/BehaviorCollectManager(21901): Fail to acquire dataAnalyzerService...
11-05 12:38:27.360 I/i_webview_repr(21901): QarthPatchMonintor::Init
11-05 12:38:27.360 I/i_webview_repr(21901): 
11-05 12:38:27.360 I/i_webview_repr(21901): QarthPatchMonintor::StartWatch
11-05 12:38:27.360 I/i_webview_repr(21901): 
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::WatchPackage: /data/hotpatch/fwkhotpatch/
11-05 12:38:27.361 I/i_webview_repr(21901): 
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::CheckAndWatchPatch: /data/hotpatch/fwkhotpatch/com.example.huawei_webview_repro
11-05 12:38:27.361 I/i_webview_repr(21901): 
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::CheckAndWatchPatch: /data/hotpatch/fwkhotpatch/all
11-05 12:38:27.361 I/i_webview_repr(21901): 
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::Run
11-05 12:38:27.361 I/i_webview_repr(21901): 
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::Reading
11-05 12:38:27.361 I/i_webview_repr(21901): 
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::CheckNotifyEvent
11-05 12:38:27.361 I/i_webview_repr(21901): 
11-05 12:38:27.361 I/i_webview_repr(21901): QarthPatchMonintor::CheckNotifyEvent before read
11-05 12:38:27.362 I/i_webview_repr(21901): 
11-05 12:38:27.362 I/HwApiCacheMangerEx(21901): apicache path=/storage/emulated/0 state=mounted key=com.example.huawei_webview_repro#10986#256
11-05 12:38:27.362 I/HwApiCacheMangerEx(21901): need clear apicache,because volumes changed,oldCnt=0 newCnt=1
11-05 12:38:27.365 I/HwApiCacheMangerEx(21901): apicache path=/storage/emulated/0 state=mounted key=com.example.huawei_webview_repro#10986#0
11-05 12:38:27.365 I/HwApiCacheMangerEx(21901): need clear apicache,because volumes changed,oldCnt=1 newCnt=1
11-05 12:38:27.380 I/AwareBitmapCacher(21901): init processName:com.example.huawei_webview_repro pid=21901 uid=10986
11-05 12:38:27.388 E/AwareLog(21901): AtomicFileUtils: readFileLines file not exist: android.util.AtomicFile@225bc18
11-05 12:38:27.400 I/iGraphics(21901): [0020080c] pn: com.example.huawei_webview_repro, p: 21901
11-05 12:38:27.401 I/iGraphics(21901): [0030050c] PV 10
11-05 12:38:27.401 I/iGraphics(21901): [0030050c] no element 'igfx'
11-05 12:38:27.402 I/iGraphics(21901): [0030050c] LoadCloudParams lib file success.
11-05 12:38:27.403 E/Parcel  (21901): Reading a NULL string not supported here.
11-05 12:38:27.415 E/GED     (21901): Failed to get GED Log Buf, err(0)
11-05 12:38:27.464 W/i_webview_repro(21901): type=1400 audit(0.0:265744): avc: denied { read } for pid=21901 name="max_map_count" dev="proc" ino=19128748 scontext=u:r:untrusted_app:s0:c218,c259,c512,c768 tcontext=u:object_r:proc_max_map_count:s0 tclass=file permissive=0
11-05 12:38:27.515 I/flutter (21901): [IMPORTANT:flutter/shell/platform/android/android_context_gl_impeller.cc(104)] Using the Impeller rendering backend (OpenGLES).
11-05 12:38:27.579 I/DecorView[](21901):  old windowMode:0 new windoMode:1
11-05 12:38:27.600 I/DecorView[](21901):  old windowMode:1 new windoMode:1
11-05 12:38:27.620 W/HiTouch_HiTouchSensor(21901): depended package hiTouch does n't exist!
11-05 12:38:27.620 I/HiTouch_HiTouchSensor(21901): HiTouch restricted: system app HiTouch don't exist.
11-05 12:38:27.676 W/Gralloc3(21901): mapper 3.x is not supported
11-05 12:38:27.679 E/ion     (21901): ioctl c0044901 failed with code -1: Invalid argument
11-05 12:38:31.576 I/Choreographer(21901): Skipped 237 frames!  The application may be doing too much work on its main thread.
11-05 12:38:31.601 W/InputMethodManager(21901): startInputReason = 1
11-05 12:38:31.617 I/WebViewFactory(21901): Loading com.huawei.webview version 10.0.0.308 (code 356)
11-05 12:38:31.688 I/cr_PathUtils(21901): Get data directory:/data/user/0/com.example.huawei_webview_repro/app_hws_webview
11-05 12:38:31.692 I/cr_LibraryLoader(21901): Time to load native libraries: 4 ms
11-05 12:38:31.707 I/hwschromium-356(21901): [INFO:library_loader_hooks.cc(51)] Chromium logging enabled: level = 0, default verbosity = 0
11-05 12:38:31.708 I/cr_LibraryLoader(21901): Expected native library version number "78.0.3904.108", actual native library version number "78.0.3904.108"
11-05 12:38:31.726 W/cr_ChildProcLH(21901): Create a new ChildConnectionAllocator with package name = com.huawei.webview, sandboxed = true
11-05 12:38:31.731 I/cr_BrowserStartup(21901): Initializing chromium process, singleProcess=false
11-05 12:38:31.741 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/natives_blob.bin
11-05 12:38:31.742 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/snapshot_blob_32.bin
11-05 12:38:31.742 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/snapshot_blob_64.bin
11-05 12:38:31.742 E/hwschromium-356(21901): [ERROR:apk_assets.cc(41)] open apk asset failed : assets/snapshot_blob_64.bin
11-05 12:38:31.743 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/icudtl.dat
11-05 12:38:31.744 I/hwschromium-356(21901): [INFO:content_main_runner_impl.cc(217)] Load v8-snapshot from file v8_snapshot_32_data
11-05 12:38:31.748 E/hwschromium-356(21901): [ERROR:filesystem_posix.cc(89)] stat /data/user/0/com.example.huawei_webview_repro/cache/WebView/Crashpad: No such file or directory (2)
11-05 12:38:31.749 E/hwschromium-356(21901): [ERROR:filesystem_posix.cc(62)] mkdir /data/user/0/com.example.huawei_webview_repro/cache/WebView/Crashpad: No such file or directory (2)
11-05 12:38:31.752 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/chrome_100_percent.pak
11-05 12:38:31.755 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/stored-locales/en-US.pak
11-05 12:38:31.756 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/resources.pak
11-05 12:38:31.777 W/hwschromium-356(21901): [WARNING:dns_config_service_posix.cc(341)] Failed to read DnsConfig.
11-05 12:38:31.803 I/hwschromium-356(21901): [INFO:cookie_manager.cc(354)] Execute Async Setting CookieManager Start
11-05 12:38:31.803 I/hwschromium-356(21901): [INFO:cookie_manager.cc(378)] Execute Async Setting CookieManager End
11-05 12:38:32.060 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/natives_blob.bin
11-05 12:38:32.061 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/snapshot_blob_32.bin
11-05 12:38:32.061 I/hwschromium-356(21901): [INFO:apk_assets.cc(20)] open apk asset:assets/snapshot_blob_64.bin
11-05 12:38:32.062 W/hwschromium-356(21901): [WARNING:child_process_launcher_helper_posix.cc(119)] Ignoring invalid file assets/snapshot_blob_64.bin
11-05 12:38:32.066 W/cr_media(21901): Requires BLUETOOTH permission
11-05 12:38:32.077 I/cr_ChildProcLauncher(21901): on connect callback, pid=21977
11-05 12:38:32.090 W/Gralloc3(21901): allocator 3.x is not supported
11-05 12:38:32.093 W/IMGSRV  (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma 
11-05 12:38:32.128 I/chatty  (21901): uid=10986(com.example.huawei_webview_repro) Chrome_InProcGp identical 2 lines
11-05 12:38:32.128 W/IMGSRV  (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma 
11-05 12:38:32.139 I/DecorView[](21901):  old windowMode:1 new windoMode:1
11-05 12:38:32.175 W/VideoCapabilities(21901): Unsupported mime video/divx
11-05 12:38:32.177 W/VideoCapabilities(21901): Unsupported mime video/divx3
11-05 12:38:32.183 W/VideoCapabilities(21901): Unrecognized profile/level 1/32 for video/mp4v-es
11-05 12:38:32.183 W/VideoCapabilities(21901): Unrecognized profile/level 32768/2 for video/mp4v-es
11-05 12:38:32.183 W/VideoCapabilities(21901): Unrecognized profile/level 32768/64 for video/mp4v-es
11-05 12:38:32.185 W/VideoCapabilities(21901): Unsupported mime video/x-ms-wmv
11-05 12:38:32.186 W/VideoCapabilities(21901): Unsupported mime video/xvid
11-05 12:38:32.191 W/VideoCapabilities(21901): Unrecognized profile/level 1/32 for video/mp4v-es
11-05 12:38:32.201 I/VideoCapabilities(21901): Unsupported profile 4 for video/mp4v-es
11-05 12:38:32.239 W/IMGSRV  (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma 
11-05 12:38:32.295 I/chatty  (21901): uid=10986(com.example.huawei_webview_repro) Chrome_InProcGp identical 4 lines
11-05 12:38:32.303 W/IMGSRV  (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma 
11-05 12:38:32.320 I/HwViewRootImpl(21901): removeInvalidNode jank list is null
11-05 12:38:32.341 W/InputMethodManager(21901): startInputReason = 5
11-05 12:38:32.394 I/flutter (21901): WebView finished loading
11-05 12:38:32.407 W/IMGSRV  (21901): glGetString:4370: Override GL_RENDERER PowerVR SGX Doma 
11-05 12:38:33.865 W/OpenGLRenderer(21901): dequeueBuffer failed, error = -110; switching to fallback
11-05 12:38:33.867 W/OpenGLRenderer(21901): reserveNext failed, error = -2147483648 (Unknown error -2147483648)
11-05 12:38:38.509 I/Hwaps   (21901): APS: EventAnalyzed: initAPS: version is 10.1.0.18
11-05 12:38:38.511 I/hwaps   (21901): HwAps: JNI_OnLoad
11-05 12:38:38.671 I/flutter (21901): WebView finished loading
11-05 12:38:44.423 I/flutter (21901): WebView finished loading
11-05 12:38:50.195 I/flutter (21901): WebView finished loading
11-05 12:39:15.795 W/InputMethodManager(21901): startInputReason = 4
11-05 12:39:29.127 I/flutter (21901): WebView finished loading
11-05 12:39:33.835 I/GED     (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.864 I/GED     (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.892 I/GED     (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.894 I/GED     (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.894 I/GED     (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:33.895 I/chatty  (21901): uid=10986(com.example.huawei_webview_repro) 1.io identical 1 line
11-05 12:39:33.895 I/GED     (21901): ged_boost_gpu_freq, level 100, eOrigin 2, final_idx 2, oppidx_max 2, oppidx_min 0
11-05 12:39:38.911 I/hwschromium-356(21901): [INFO:aw_contents.cc(360)] AwContents 0xbda74780 destroyed

Flutter Doctor output

Doctor output
[✓] Flutter (Channel stable, 3.47.8, on Linux Mint 22.3 6.8.0-147-generic, locale en_US.UTF-8) [40ms]
    • Flutter version 3.47.8 on channel stable at <stock-flutter-sdk>
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 737ba8f885 (13 days ago), 2026-10-22 21:37:31 -0700
    • Engine revision cf636b1dfb
    • Dart version 3.13.7
    • DevTools version 2.60.0
    • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop, enable-android, enable-ios, cli-animations, enable-native-assets, enable-record-use, enable-swift-package-manager, omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration

[!] Android toolchain - develop for Android devices (Android SDK version 36.1.0) [2.4s]
    • Android SDK at /home/<user>/development/Android/Sdk
    • Emulator version 35.5.10.0 (build_id 13402964) (CL:N/A)
    • Platform android-37.0, build-tools 36.1.0
    • Java binary at: /opt/android-studio/jbr/bin/java
      This is the JDK bundled with the latest Android Studio installation on this machine.
      To manually set the JDK path, use: `flutter config --jdk-dir="path/to/jdk"`.
    • Java version OpenJDK Runtime Environment (build 21.0.6+-13368085-b895.109)
    ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses

[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome) [9ms]
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.

[✗] Linux toolchain - develop for Linux desktop [812ms]
    ✗ clang++ is required for Linux development.
      It is likely available from your distribution (e.g.: apt install clang), or can be downloaded from https://releases.llvm.org/
    ✗ CMake is required for Linux development.
      It is likely available from your distribution (e.g.: apt install cmake), or can be downloaded from https://cmake.org/download/
    ✗ ninja is required for Linux development.
      It is likely available from your distribution (e.g.: apt install ninja-build), or can be downloaded from https://github.com/ninja-build/ninja/releases
    • pkg-config version 1.8.1
    • OpenGL core renderer: NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2 (X11)
    • OpenGL core version: 4.6.0 NVIDIA 595.99.02 (X11)
    • OpenGL core shading language version: 4.60 NVIDIA (X11)
    • OpenGL ES renderer: NVIDIA GeForce RTX 4060 Laptop GPU/PCIe/SSE2 (X11)
    • OpenGL ES version: OpenGL ES 3.2 NVIDIA 595.99.02 (X11)
    • OpenGL ES shading language version: OpenGL ES GLSL ES 3.20 (X11)
    • GL_EXT_framebuffer_blit: yes (X11)
    • GL_EXT_texture_format_BGRA8888: yes (X11)

[✓] Connected device (2 available) [196ms]
    • Pixel 3a (mobile) • <redacted device serial> • android-arm64 • Android 12 (API 32)
    • Linux (desktop)   • linux      • linux-x64     • Linux Mint 22.3 6.8.0-147-generic

[✓] Network resources [445ms]
    • All expected network resources are available.

! Doctor found issues in 3 categories.

</details>

Activity

  1. suryaKommana2662 commented on Nov 6, 2026

    @suryaKommana2662
    Contributor

    @Aulig Thanks for the report. I tested the provided reproduction on a Pixel 10 A, but I couldn't reproduce the issue. The WebView updates as expected on this device. Since the report specifically identifies Huawei devices running Android 10, I couldn't verify the behaviour on the affected hardware. routing to the team-android for further investigation.

  2. added
    platform-androidAndroid applications specifically
    team-androidOwned by Android platform team
    and removed
    in triagePresently being triaged by the triage team
    on Nov 6, 2026
  3. okorohelijah commented on Nov 10, 2026

    @okorohelijah
    Contributor

    @Aulig does this only reproduce when the system WebView provider is com.huawei.webview, or does it also freeze if switched to standard Android System WebView / Chrome?"

  4. added
    P2Important issues not at the top of the work list
    triaged-androidTriaged by Android platform team
    on Nov 10, 2026
  5. Aulig commented on Nov 11, 2026

    @Aulig
    Author

    @okorohelijah I can't say 100% for sure since I'm testing via Huawei's cloud testing tool where I can't change it. However, my app's users who initially reported this issue to me say they are using Android System WebView and experience this bug.

    Also considering that the code I identified above to be the cause of the issue doesn't discriminate between WebView providers I think it's very likely.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work liste: device-specificOnly manifests on certain devicesplatform-androidAndroid applications specificallyteam-androidOwned by Android platform teamtriaged-androidTriaged by Android platform team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions