Skip to content

[Impeller] Opting out via EnableImpeller=false is deprecated, but Impeller crashes (SIGABRT/SIGSEGV) in production on Mali GPU devices (MediaTek/Samsung) with no viable alternative yet #190195

Closed

Description

@rajatjain909

Steps to reproduce

  1. Build a release/profile Android APK with Impeller opted out via AndroidManifest.xml:
  2. Ship to production. App uses video_player (^2.13.0) to preview user-uploaded video attachments via a Texture widget, and general image/list UI elsewhere.
  3. Monitor Google Play Console -> Android vitals -> Crashes and ANRs for the release.

We opted out of Impeller specifically because of native crashes/ANRs with Impeller enabled (see "Actual results" below), only to now see the new deprecation warning telling us this opt-out path is going away with no alternative offered other than "fix the underlying issue," which is upstream vendor GPU driver code we don't control.

Expected results

Either:

  • The EnableImpeller=false opt-out continues to be supported until Impeller reaches parity/stability on affected GPU driver stacks (Mali, in this case), or
  • Impeller does not crash/hang natively on the affected devices/drivers in the first place.

Actual results

With Impeller enabled (the default, no opt-out), we observed the following in production (Play Console, app version 12 (1.0.2), last 60 days, "In production" issues, User-perceived crashes and ANRs only):

All affected devices are budget/mid-range phones (MediaTek mt6835, MediaTek Helio-based Samsung A/M-series) sharing ARM Mali GPUs, spanning Android 12 through 16 - i.e. not tied to one Android version, but to the Mali driver family across multiple vendor integrations (MediaTek's own libgpu_aux.so/libgralloc_extra.so glue, and Samsung's Exynos/MediaTek variants). This device profile is exactly our primary user base: a Government of India field-data-collection app used by rural agricultural extension officers, most of whom carry the cheapest available Android hardware.

Given this, we opted out via EnableImpeller=false in AndroidManifest.xml as a stopgap, specifically to keep video-preview and general navigation crash-free for these users. The new deprecation warning says to "report a bug describing the issue" if we need to keep opting out - this issue is that report. We cannot re-enable Impeller in production until this class of crash is resolved, as it directly affects a core workflow (reviewing uploaded photo/video evidence of government events) with a hard crash (SIGABRT/SIGSEGV), not a cosmetic glitch.

Code sample

Code sample
// We're not able to share the full production app, but the relevant path is
// exactly Flutter's standard external-texture rendering used by any
// video_player-backed Texture widget - no custom native code, no custom
// PlatformView, no manual EGL/Vulkan handling on our side.
//
// pubspec.yaml dependencies touching the Android rendering surface:
//   video_player: ^2.13.0
//   photo_view: ^0.15.0
//   image_picker
//   file_picker

Screenshots or Video

Screenshots / Video demonstration

N/A - these are native crashes captured via Play Console's Android vitals (App ANRs & Crashes), not something we can screen-record from a running device (they terminate the process).

Logs

Logs
Deprecation warning that prompted this report:

I/flutter: [IMPORTANT:flutter/shell/common/shell.cc(528)] [Action Required]: Impeller opt-out deprecated.
    The application opted out of Impeller by either using the
    `--no-enable-impeller` flag or the
    `io.flutter.embedding.android.EnableImpeller` `AndroidManifest.xml` entry.
    These options are going to go away in an upcoming Flutter release. Remove
    the explicit opt-out. If you need to opt-out, please report a bug describing
    the issue.

    https://github.com/flutter/flutter/issues/new?template=02_bug.yml

Native crash stack traces are included in full above under "Actual results."

Flutter Doctor output

Doctor output
[✓] Flutter (Channel stable, 3.44.6, on Microsoft Windows [Version 10.0.22631.4460], locale en-IN) [196ms]
    • Flutter version 3.44.6 on channel stable at C:\Users\rajat_jain\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision ee80f08bbf (3 weeks ago), 2026-07-08 15:02:06 -0700
    • Engine revision 83675ed276
    • Dart version 3.12.2
    • DevTools version 2.57.0

[✓] Windows Version (11 Pro 64-bit, 23H2, 2009) [2.7s]

[✓] Android toolchain - develop for Android devices (Android SDK version 37.0.0) [3.1s]
    • Android SDK at C:\Users\rajat_jain\AppData\Local\Android\sdk
    • Platform android-37.0, build-tools 37.0.0
    • Java version OpenJDK Runtime Environment (build 21.0.10+-14961533-b1163.108)
    • All Android licenses accepted.

[✓] Chrome - develop for the web [7ms]

[✗] Visual Studio - develop Windows apps [6ms]
    ✗ Visual Studio not installed; this is necessary to develop Windows apps.

[✓] Connected device (4 available) [384ms]
    • sdk gphone64 x86 64 (mobile) • emulator-5554 • android-x64    • Android 14 (API 34) (emulator)
    • Windows (desktop)            • windows       • windows-x64    • Microsoft Windows [Version 10.0.22631.4460]
    • Chrome (web)                 • chrome        • web-javascript • Google Chrome 150.0.7871.182
    • Edge (web)                   • edge          • web-javascript • Microsoft Edge 150.0.4078.65

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

! Doctor found issues in 1 category.

Activity

  1. suryaKommana2662 commented on Jul 29, 2026

    @suryaKommana2662
    Contributor

    @rajatjain909 Thanks for the detailed report and for providing the production crash and ANR data. Could you please confirm which Flutter SDK version was used to build the production APK (app version 12 / 1.0.2) that generated the reported crash data? This will help us correlate the crash reports with the corresponding Flutter engine revision and also, could you also provide a minimal reproducible sample(main.dart file) that demonstrates the crash? This would help the team investigate the issue further. We understand that reproducing the crash may depend on the specific affected Mali GPU devices and driver configurations.

  2. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    and removed
    in triagePresently being triaged by the triage team
    on Jul 29, 2026
  3. rajatjain909 commented on Aug 15, 2026

    @rajatjain909
    Author

    @suryaKommana2662 Thank you for your patience. I checked and the Flutter SDK Version at the time 3.44.6.

    And the answer to your other question, following is my main.dart file; however its generic asF

    
    import 'package:flutter/foundation.dart';
    import 'package:flutter/material.dart';
    import 'package:flutter/services.dart';
    import 'package:get/get.dart';
    
    import 'core/cache/cache_initializer.dart';
    import 'core/common_widgets/version_badge.dart';
    import 'core/di/injector.dart';
    import 'core/localization/app_strings.dart';
    import 'core/route/app_pages.dart';
    import 'core/route/app_routes.dart';
    import 'core/theme/app_colors.dart';
    import 'core/theme/app_typography.dart';
    import 'network/http_overrides.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
    
      setupDependencies();
      // PERFORMANCE: Initialize all cache systems
      await CacheInitializer.initializeAllCaches();
      // Resolve the build version once, so the badge on every screen is a plain
      // synchronous read rather than a per-screen platform lookup.
      await AppVersion.load();
      runApp(MyApp());
    }
    
    class MyApp extends StatefulWidget {
      const MyApp({super.key});
    
      @override
      State<MyApp> createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      @override
      void dispose() {
        // PERFORMANCE: Cleanup cache on app close
        CacheInitializer.disposeAllCaches();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return GetMaterialApp(
          debugShowCheckedModeBanner: false,
          title: AppStrings.appTitle,
          translations: AppTranslations(),
          locale: const Locale('en', 'US'),
          fallbackLocale: const Locale('en', 'US'),
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: AppColors.primary),
            textTheme: AppTypography.textTheme,
            scaffoldBackgroundColor: AppColors.surface,
            useMaterial3: true,
          ),
          getPages: AppPages.pages,
          initialRoute: AppRoutes.appEntryPoint,
          // Wraps the navigator, so the version marker shows on every route
          // without each feature page having to opt in.
          builder: (context, child) =>
              VersionBadge(child: child ?? const SizedBox.shrink()),
        );
      }
    }
    

    these error and ANR were in google play console; and I don't understood the cause; so I tried to understand using AI, that was also beyond me. There is nothing in logs when I run the project on emulator or my device.

  4. removed
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Aug 15, 2026
  5. suryaKommana2662 commented on Aug 17, 2026

    @suryaKommana2662
    Contributor

    @rajatjain909 Thanks for the additional details. I noticed that the reported production crashes occurred with Flutter 3.44.6. Could you please verify whether the issue is still reproducible with the latest stable Flutter release? If the issue persists, please let us know

  6. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    and removed
    in triagePresently being triaged by the triage team
    on Aug 17, 2026
  7. github-actions commented on Sep 7, 2026

    @github-actions

    Without additional information, we are unfortunately not sure how to resolve this issue. We are therefore reluctantly going to close this bug for now.

    If you find this problem please file a new issue with the same description, what happens, logs and the output of 'flutter doctor -v'. All system setups can be slightly different so it's always better to open new issues and reference the related ones.

    Thanks for your contribution.

  8. github-actions commented on Sep 21, 2026

    @github-actions

    This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

  9. locked as resolved and limited conversation to collaborators on Sep 21, 2026
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

    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions