Closed xt1zer closed 2 years ago
Добрый день!
Очень напоминает ту же проблему, что и в #150. Попробуйте описанное там решение.
В MainActivity.kt всё прописано как в readme, и ключ тоже стоит.
Ещё стоило добавить, что в процессе долговременной разработки менялся appid приложения, от старого айди следов не осталось. Но сомневаюсь, что это провоцирует исключение.
Подскажите, у вас есть в AndroidManifest.xml такая строка?
<meta-data
android:name="flutterEmbedding"
android:value="2" />
Есть, внутри блока <application>
Еще бывает что проблема со старой версией в gradle-wrapper.properties
.
Попробуйте там обновить версию.
Также еще подскажите в GeneratedPluginRegistrant.java
есть строка?
flutterEngine.getPlugins().add(new com.unact.yandexmapkit.YandexMapkitPlugin());
gradle-wrapper.properties
. Попробуйте там обновить версию.
Ещё недавно повысил версию в android
до 7.0.2, последнюю доступную для плагина. В properties она совпадает.
flutterEngine.getPlugins().add(new com.unact.yandexmapkit.YandexMapkitPlugin());
Есть
По-видимому, конфликтов пакетов нет. Я скопировал список пакетов из pubspec.yaml в новый проект и только запускал виджет в scaffold, без всякого другого кода, проблемы не возникают. Может это тогда возникнуть из-за расположения виджета? Он стоит на дне стека.
Не, виджеты тут не причем, тогда бы он был просто не виден или что-то в таком роде, а тут плагин не смог инициализироваться по какой-то причине. Тут проблема с зависимостями при сборке android проекта. Раз с такими же зависимостями собирается в новом проекте, то вероятнее всего либо что-то закешировалось в проекте, либо где-то настройки не верно установлены(например в MainActivity.kt порядок выполнения важен)
Нашёл причину. Для пакета audio-service понадобилось переименовать activity в манифесте, и похоже, что этот пакет сильно привязан к этому имени. Буду искать альтернативу.
Прошу помочь по этому же вопросу. Решено, что пакет audio-service нужно оставить, но после его установки я не могу использовать mapkit. В доках написано, что нужно переименовать главный activity в манифест-файле. На стэке по этому вопросу сказали, что имя этого activity должен совпадать и в kotlin (или java) файле, но я не знаю как тогда он должен называться. И что именно - просто имя класса, или файла кода, или обоих?
Или же надо создать кастомный activity? А как это сделать я никак не пойму. Если есть решение, я бы любезно попросил пример. Сейчас мой kotlin файл ничем не примечателен:
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import com.yandex.mapkit.MapKitFactory
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
MapKitFactory.setApiKey("my_key")
super.configureFlutterEngine(flutterEngine)
}
}
И в манифесте следующее изменение:
<activity
android:name="com.ryanheise.audioservice.AudioServiceActivity"
<!-- и прочие вещи-->
</activity>
<!-- другие activity, сервисы, разрешения и т.д.-->
Сделал другой пример: перегрузить provideFlutterEngine, чтобы вернуть соответствующий engine из AudioServicePlugin. Это написано в доках по пакету для кастомных activity.
import android.content.Context
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import com.yandex.mapkit.MapKitFactory
import com.ryanheise.audioservice.AudioServicePlugin
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
MapKitFactory.setApiKey("9b598cce-8311-4ae5-8fc5-b536013023f2")
super.configureFlutterEngine(flutterEngine)
}
override fun provideFlutterEngine(context: Context): FlutterEngine? = AudioServicePlugin.getFlutterEngine(context)
}
А в манифесте имя activity вернул MainActivity. Опять же, возникает ошибка регистрации типа yandex_mapkit.
Там надо вот так это делать, и кроме этого надо AndroidManifest.xml android:name
вернуть старое название .MainActivity
import android.content.Context
import androidx.annotation.NonNull
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import com.yandex.mapkit.MapKitFactory
import com.ryanheise.audioservice.AudioServicePlugin
class MainActivity: FlutterActivity() {
override fun provideFlutterEngine(@NonNull context: Context): FlutterEngine {
MapKitFactory.setApiKey("YOUR_API_KEY")
return AudioServicePlugin.getFlutterEngine(context)
}
}
О боги... оно работает! А мы думали над этим месяц, если не больше! Превеликая благодарность!
Появляется на андроид 11, устройство и эмуль с Google APIs образом; на ios не тестировали. Началось после перехода с другого api для карт (использую последнюю гит версию для функционала маршрутизации), причём следовал всем шагам по установке. Происходит во всех местах вызова YandexMap. Но ещё я поставил гит версию в другом проекте вместо 1.1.1, там такой проблемы нет.
Что делал:
flutter clean
,flutter pub cache clean
.Какие-то источники подсказывают, что это может возникать из-за конфликта пакетов, использующих PlatformViews одновременно (в подробности не вдавался). Есть ли другие идеи?
Логи
``` E/flutter (18994): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: PlatformException(error, java.lang.IllegalStateException: Trying to create a platform view of unregistered type: yandex_mapkit/yandex_map E/flutter (18994): at io.flutter.plugin.platform.PlatformViewsController$1.createVirtualDisplayForPlatformView(PlatformViewsController.java:197) E/flutter (18994): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:107) E/flutter (18994): at io.flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:59) E/flutter (18994): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233) E/flutter (18994): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:84) E/flutter (18994): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:865) E/flutter (18994): at android.os.MessageQueue.nativePollOnce(Native Method) E/flutter (18994): at android.os.MessageQueue.next(MessageQueue.java:335) E/flutter (18994): at android.os.Looper.loop(Looper.java:183) E/flutter (18994): at android.app.ActivityThread.main(ActivityThread.java:7656) E/flutter (18994): at java.lang.reflect.Method.invoke(Native Method) E/flutter (18994): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) E/flutter (18994): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) E/flutter (18994): , null, null) E/flutter (18994): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:607:7) E/flutter (18994): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18) E/flutter (18994):Доктор
``` [√] Flutter (Channel stable, 2.5.2, on Microsoft Windows [Version 10.0.19043.1237], locale en-GB) • Flutter version 2.5.2 at *****\flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 3595343e20 (8 days ago), 2021-09-30 12:58:18 -0700 • Engine revision 6ac856380f • Dart version 2.14.3 [√] Android toolchain - develop for Android devices (Android SDK version 31.0.0) • Android SDK at *****\AppData\Local\Android\sdk • Platform android-31, build-tools 31.0.0 • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189) • All Android licenses accepted. [X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe) ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable. [√] Android Studio (version 2020.3) • Android Studio at C:\Program Files\Android\Android Studio • Flutter plugin can be installed from: https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189) [√] Connected device (1 available) • Edge (web) • edge • web-javascript • Microsoft Edge 94.0.992.38 ```