flutter update 1.17 android crash

Viewed 2670

I'm working on a flutter project and I am on the stable version of flutter and I've updated to the latest stable version 1.17 and after the update, my app crashes after building and running the app and the first part of the output of the crash log is this.

[ +589 ms] W/FlutterEnginePluginRegistry( 4594): Attempted to register plugin (io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry$ShimRegistrarAggregate@3e8e5e0a) but it
was already registered with this FlutterEngine (io.flutter.embedding.engine.FlutterEngine@901467b).
[   +1 ms] W/FlutterEnginePluginRegistry( 4594): Attempted to register plugin (com.ryanheise.audioservice.AudioServicePlugin@3726ac98) but it was already registered with this
FlutterEngine (io.flutter.embedding.engine.FlutterEngine@901467b).

and here are the errors:

[   +8 ms] E/CrashlyticsCore(11221): Failed to execute task.
[        ] E/CrashlyticsCore(11221): java.util.concurrent.TimeoutException
[        ] E/CrashlyticsCore(11221):    at java.util.concurrent.FutureTask.get(FutureTask.java:176)
[   +1 ms] E/CrashlyticsCore(11221):    at
com.crashlytics.android.core.CrashlyticsBackgroundWorker.submitAndWait(CrashlyticsBackgroundWorker.java:41)
[   +1 ms] E/CrashlyticsCore(11221):    at
com.crashlytics.android.core.CrashlyticsController.handleUncaughtException(CrashlyticsController.java:321)
[   +1 ms] E/CrashlyticsCore(11221):    at
com.crashlytics.android.core.CrashlyticsController$6.onUncaughtException(CrashlyticsController.java:301)
[   +1 ms] E/CrashlyticsCore(11221):    at
com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:42)    
[   +6 ms] E/CrashlyticsCore(11221):    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
[   +1 ms] E/CrashlyticsCore(11221):    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
[        ] E/AndroidRuntime(11221): FATAL EXCEPTION: main
[        ] E/AndroidRuntime(11221): Process: com.domain.app.debug, PID: 11221
[        ] E/AndroidRuntime(11221): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.domain.app.debug/com.domain.app.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface   
method 'void io.flutter.plugin.common.BinaryMessenger.setMessageHandler(java.lang.String,
io.flutter.plugin.common.BinaryMessenger$BinaryMessageHandler)' on a null object reference
[   +1 ms] E/AndroidRuntime(11221):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
[        ] E/AndroidRuntime(11221):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
[        ] E/AndroidRuntime(11221):     at android.app.ActivityThread.access$800(ActivityThread.java:151)
[        ] E/AndroidRuntime(11221):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
[        ] E/AndroidRuntime(11221):     at android.os.Handler.dispatchMessage(Handler.java:102)
[        ] E/AndroidRuntime(11221):     at android.os.Looper.loop(Looper.java:135)
[        ] E/AndroidRuntime(11221):     at android.app.ActivityThread.main(ActivityThread.java:5254)
[        ] E/AndroidRuntime(11221):     at java.lang.reflect.Method.invoke(Native Method)
[        ] E/AndroidRuntime(11221):     at java.lang.reflect.Method.invoke(Method.java:372)
[   +1 ms] E/AndroidRuntime(11221):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
[   +7 ms] E/AndroidRuntime(11221):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
[   +1 ms] E/AndroidRuntime(11221): Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void
io.flutter.plugin.common.BinaryMessenger.setMessageHandler(java.lang.String,
io.flutter.plugin.common.BinaryMessenger$BinaryMessageHandler)' on a null object reference
[   +1 ms] E/AndroidRuntime(11221):     at io.flutter.plugin.common.MethodChannel.setMethodCallHandler(MethodChannel.java:116)     
[        ] E/AndroidRuntime(11221):     at xyz.luan.audioplayers.AudioplayersPlugin.<init>(AudioplayersPlugin.java:36)
[        ] E/AndroidRuntime(11221):     at xyz.luan.audioplayers.AudioplayersPlugin.registerWith(AudioplayersPlugin.java:31)       
[        ] E/AndroidRuntime(11221):     at
io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:19)
[   +1 ms] E/AndroidRuntime(11221):     at com.domain.app.MainActivity.configureFlutterEngine(MainActivity.kt:34)
[        ] E/AndroidRuntime(11221):     at
io.flutter.embedding.android.FlutterFragment.configureFlutterEngine(FlutterFragment.java:944)
[   +1 ms] E/AndroidRuntime(11221):     at
io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:178)
[  +12 ms] E/AndroidRuntime(11221):     at io.flutter.embedding.android.FlutterFragment.onAttach(FlutterFragment.java:578)
[   +1 ms] E/AndroidRuntime(11221):     at androidx.fragment.app.Fragment.performAttach(Fragment.java:2672)
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentStateManager.attach(FragmentStateManager.java:263)        
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1170)
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1255)
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1138)
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:136)  
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1989)     
[        ] E/AndroidRuntime(11221):     at
androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
[   +6 ms] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2629)    
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:2577)[        ] E/AndroidRuntime(11221):     at
androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:247)
[        ] E/AndroidRuntime(11221):     at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:541)
[   +1 ms] E/AndroidRuntime(11221):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
[        ] E/AndroidRuntime(11221):     at android.app.Activity.performStart(Activity.java:6006)
[        ] E/AndroidRuntime(11221):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)

this is my main activity:

package com.domain.app

import android.content.Context
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import android.view.WindowManager.LayoutParams;
import io.flutter.embedding.engine.dart.DartExecutor
import android.view.KeyEvent
import android.util.Log
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;

class MainActivity : FlutterFragmentActivity() {
    var handleKeys: Boolean = false
    var methodChannel: MethodChannel? = null;

    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine)
        // No screenshots unless enabled
        val sharedPreferences = getSharedPreferences("FlutterSharedPreferences", Context.MODE_PRIVATE);
        val canShot = sharedPreferences.getBoolean("flutter.screenshot", false);
        if (!canShot)
            getWindow().addFlags(LayoutParams.FLAG_SECURE)
        methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "com.domain.app/keyboard")
        methodChannel?.setMethodCallHandler { call, result ->
            if (call.method == "setScreenName") {
                val arg = call.arguments.toString();
                handleKeys = arg == "ebook_screen";
            } else {
                result.notImplemented()
            }
        }
    }

    override fun provideFlutterEngine(context: Context): FlutterEngine {
        // Instantiate a FlutterEngine.
        val flutterEngine = FlutterEngine(context.applicationContext)

        // Start executing Dart code to pre-warm the FlutterEngine.
        flutterEngine.dartExecutor.executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        )

        return flutterEngine
    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        if (event?.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN ||
                event?.getKeyCode() == KeyEvent.KEYCODE_SPACE ||
                event?.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {

            if (handleKeys) {
                methodChannel?.invokeMethod("onKeyDown", event?.getKeyCode().toString())
                return true;
            } else
                return super.onKeyDown(keyCode, event)
        } else {
            return super.onKeyDown(keyCode, event)
        }
    }
}

This is my GeneratedPluginRegistrant.java file:

package io.flutter.plugins;

import androidx.annotation.Keep;
import androidx.annotation.NonNull;

import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;

/**
 * Generated file. Do not edit.
 * This file is generated by the Flutter tool based on the
 * plugins that support the Android platform.
 */
@Keep
public final class GeneratedPluginRegistrant {
  public static void registerWith(@NonNull FlutterEngine flutterEngine) {
    ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
    flutterEngine.getPlugins().add(new com.ryanheise.audioservice.AudioServicePlugin());
      xyz.luan.audioplayers.AudioplayersPlugin.registerWith(shimPluginRegistry.registrarFor("xyz.luan.audioplayers.AudioplayersPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.connectivity.ConnectivityPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.deviceinfo.DeviceInfoPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebaseanalytics.FirebaseAnalyticsPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.crashlytics.firebasecrashlytics.FirebaseCrashlyticsPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin());
    flutterEngine.getPlugins().add(new com.pichillilorenzo.flutter_inappwebview.InAppWebViewFlutterPlugin());
    flutterEngine.getPlugins().add(new com.rmawatson.flutterisolate.FlutterIsolatePlugin());
      io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin.registerWith(shimPluginRegistry.registrarFor("io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin"));
      de.gigadroid.flutterudid.FlutterUdidPlugin.registerWith(shimPluginRegistry.registrarFor("de.gigadroid.flutterudid.FlutterUdidPlugin"));
      io.github.ponnamkarthik.toast.fluttertoast.FluttertoastPlugin.registerWith(shimPluginRegistry.registrarFor("io.github.ponnamkarthik.toast.fluttertoast.FluttertoastPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.googlesignin.GoogleSignInPlugin());
    flutterEngine.getPlugins().add(new vn.hunghd.flutter.plugins.imagecropper.ImageCropperPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.imagepicker.ImagePickerPlugin());
      com.zaihui.installplugin.InstallPlugin.registerWith(shimPluginRegistry.registrarFor("com.zaihui.installplugin.InstallPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.localauth.LocalAuthPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.packageinfo.PackageInfoPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
    flutterEngine.getPlugins().add(new com.baseflow.permissionhandler.PermissionHandlerPlugin());
      flutter.plugins.screen.screen.ScreenPlugin.registerWith(shimPluginRegistry.registrarFor("flutter.plugins.screen.screen.ScreenPlugin"));
    flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
    flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.videoplayer.VideoPlayerPlugin());
    flutterEngine.getPlugins().add(new creativecreatorormaybenot.wakelock.WakelockPlugin());
    flutterEngine.getPlugins().add(new io.flutter.plugins.webviewflutter.WebViewFlutterPlugin());
  }
}

And these are my dependencies:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  path_provider: ^1.6.7
  permission_handler: ^5.0.0+hotfix.5
  flutter_cupertino_localizations: ^1.0.1
  #flutter_secure_storage: ^3.3.3
  dio: ^3.0.9
  dio_http2_adapter: ^1.0.0
  archive: ^2.0.11
  percent_indicator: ^2.1.3
  flutter_widget_from_html: ^0.3.3+3
  google_sign_in: ^4.4.4
  fluttertoast: ^4.0.1
  package_info: ^0.4.0+17
  intl_translation: ^0.17.9 # Because every version of flutter_test from sdk depends on petitparser 2.4.0 and intl_translation >=0.17.10 depends on petitparser ^3.0.0, flutter_test from sdk is incompatible with intl_translation >=0.17.10.
  local_auth: ^0.6.2+1
  shared_preferences: ^0.5.7+1
  sqflite: ^1.3.0+1
  flutter_sticky_header: ^0.4.2
  matrix_gesture_detector: ^0.1.0
  http: ^0.12.1
  cupertino_icons: ^0.1.3
  extended_image: ^0.7.3+1
  extended_image_library: ^0.2.3
  provider: ^4.1.0
  connectivity: ^0.4.8+5
  url_launcher: ^5.4.5
  image_picker: ^0.6.6+1
  flutter_inappwebview:
    git:
      url: https://github.com/pichillilorenzo/flutter_inappwebview.git
      ref: master
  flutter_bloc: ^4.0.0
  equatable: ^1.1.1
  audioplayers: ^0.15.1
  rxdart: ^0.24.0
  flutter_widgets: ^0.1.12
  intl: ^0.16.1
  jalali_date: ^0.1.5
  encrypt: ^4.0.1
  pointycastle: ^1.0.2
  firebase_messaging: ^6.0.13
  flushbar: ^1.10.2
  html_unescape: ^1.0.1+3
  photo_view: ^0.9.2
  dart2_constant: ^1.0.2+dart2
  audio_service: ^0.8.0
  firebase_analytics: ^5.0.11
  firebase_crashlytics: ^0.1.3+3
  screen: ^0.0.5
  install_plugin: ^2.0.1
  device_info: ^0.4.2+3
  flutter_udid: ^1.0.1

any hint or idea where should I start looking to debug this issue?

1 Answers

I removed this line from Android MainActivity

 GeneratedPluginRegistrant.registerWith(flutterEngine)

and the crash was gone. Thanks to @Mariano Zorrilla I found this solution.

Related