Flutter Firebase Notification Messeging

Nov 07 2020

Próbuję zaimplementować firebase_messaging w mojej aplikacji flutter. W przypadku integracji z systemem Android, kiedy piszę natywny kod na poziomie aplikacji, pojawia się błąd dotyczący zduplikowanych klas, ale nie wiem dlaczego.

import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;

class Application: FlutterApplication(), PluginRegistrantCallback {

    override fun onCreate() {
        super.onCreate()
        FlutterFirebaseMessagingService.setPluginRegistrant(this)
    }
    override fun registerWith(registry: PluginRegistry?) {
        io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));     
    }
}

D8: Typ programu już obecny: com.project.my_project.Application com.android.builder.dexing.DexArchiveMergerException: Błąd podczas scalania archiwów dex: Dowiedz się, jak rozwiązać ten problem pod adresem https://developer.android.com/studio/build/dependencies#duplicate_classes. Typ programu już obecny: com.project.my_project.Application w com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow (D8DexArchiveMerger.java:131) pod adresem com.android.builder.dexing.D8DexArchiveMerger:11Arge pod adresem com.android.build.gradle.internal.transforms.DexMergerTransformCallable.call (DexMergerTransformCallable.java:102) pod adresem com.android.build.gradle.internal.tasks.DexMergingTaskRunnable.run (DexMergingTask.kt: 444)

  • Co poszło nie tak: wykonanie zadania „: app: mergeProjectDexDebug” nie powiodło się.

Wystąpił błąd podczas wykonywania com.android.build.gradle.internal.tasks.Workers $ ActionFacade com.android.builder.dexing.DexArchiveMergerException: Błąd podczas scalania archiwów dex: Dowiedz się, jak rozwiązać ten problem pod adresem https://developer.android.com/studio/build/dependencies#duplicate_classes. Typ programu już obecny: com.project.my_project.Application <

Flutter doctor [✓] Flutter (stabilny kanał, 1.22.3, w systemie Mac OS X 10.15.7 19H2, locale pt-BR) • Wersja Flutter 1.22.3 w / Users / developer / Documents / Documents / Development / flutter • Wersja frameworka 8874f21e79 (8 dni temu), 2020-10-29 14:14:35 -0700 • Wersja silnika a1440ca392 • Wersja Darta 2.10.3

[✓] Android toolchain - programowanie dla urządzeń z systemem Android (Android SDK w wersji 30.0.2) • Android SDK pod adresem / Users / developer / Library / Android / sdk • Platforma android-30, build-tools 30.0.2 • Pliki binarne Java pod adresem: / Aplikacje / Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java • Wersja Java OpenJDK Runtime Environment (kompilacja 1.8.0_242-release-1644-b3-6222593) • Wszystkie licencje na Androida zaakceptowane.

[✓] Xcode - programowanie na iOS i macOS (Xcode 12.1) • Xcode w /Applications/Xcode.app/Contents/Developer • Xcode 12.1, kompilacja w wersji 12A7403 • CocoaPods w wersji 1.10.0

[!] Android Studio (wersja 4.1) • Android Studio w / Applications / Android Studio.app/Contents ✗ Nie zainstalowano wtyczki Flutter; dodaje to specyficzną funkcjonalność Fluttera (nawet jeśli jest zainstalowana i działa) ✗ Nie zainstalowano wtyczki Dart; dodaje to specyficzną funkcjonalność Dart. (nawet jeśli jest zainstalowana i działa) • Wersja Java OpenJDK Runtime Environment (kompilacja 1.8.0_242-release-1644-b3-6222593)

[✓] VS Code (wersja 1.50.1) • VS Code at / Applications / Visual Studio Code.app/Contents • Rozszerzenie Flutter w wersji 3.16.0

[✓] Podłączone urządzenie (1 dostępne) • ramię sdk gphone x86 (mobilne) • emulator-5554 • android-x86 • Android 11 (API 30) (emulator)

Odpowiedzi

morpheus Nov 07 2020 at 02:25

To jest działający przykład z mojego projektu. Pamiętam, jak natknąłem się na coś takiego. Piszę tylko po to, aby udzielić szybkiej odpowiedzi, nie jestem pewien, czy to jest właściwe rozwiązanie.

import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
// import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;

public class Application extends FlutterApplication implements PluginRegistrantCallback {
  @Override
  public void onCreate() {
    super.onCreate();
    FlutterFirebaseMessagingService.setPluginRegistrant(this);
  }

  @Override
  public void registerWith(PluginRegistry registry) {
    registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin");
  }
}
lucasmelo Nov 11 2020 at 19:55

Rozwiązuję to, pobierając aktualizację wtyczki flutter. nie wiem, co się dzieje.