Unact / yandex_mapkit

Flutter implementation of YandexMapkit
MIT License
132 stars 151 forks source link

java.lang.AssertionError: setApiKey() should be called before initialize() на grade версии больше 4.0.2 (уточнение к #206) #271

Closed pamir72 closed 1 year ago

pamir72 commented 1 year ago

Уточнение к закрытому топику #206: Если приложение собрано с debug на grade версии больше 4.0.2, то возникает ошибка при каждом четном запуске приложения: "java.lang.AssertionError: setApiKey() should be called before initialize()" судя по всему из-за какого-то незавершенного процесса в предыдущем запуске. Если приложение собрано как release, данной проблемы не возникает. Прошу помощи у уважаемого сообщества, может кто-то сталкивался с подобным ? Опробавно на com.android.tools.build:gradle:7.1.3 и ниже

jjazzme commented 1 year ago

блииииииин... на релизе всё норм?)

jjazzme commented 1 year ago

У меня такая же проблема.

pamir72 commented 1 year ago

блииииииин... на релизе всё норм?)

Да, на релизе все ок. Это и спасает.

jjazzme commented 1 year ago

спасибо за инфо, а то я уже голову сломал

dumptyhumpty2014gmail commented 1 year ago

У нас, похоже, та же проблема. После перехода на flutter 3.0.0+ (пришлось и градл повысить) пошли жалобы на то, что карта зависает, вылетает или не отображается (на андроидах). Откатиться уже сейчас проблематично (( Сам по себе градл, вроде как, влиять не должен? Минимальная версия котлина? Или с чем еще может быть связано?

pamir72 commented 1 year ago

У нас проблема только с ошибкой java.lang.AssertionError: setApiKey() should be called before initialize() и крэше приложения при каждом четном запуске. Если же приложение запустилось, то никаких проблем и зависаний с картами нет.

DCrow commented 1 year ago

Добрый день!

На данный момент все равно не удается воспроизвести ошибку, возможно она зависит от специфики реального устройства.

Bahrom2101 commented 1 year ago

I had the same issue. My solution was creating MyApp class on the android side.

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        MapKitFactory.setApiKey("API_KEY")
    }
}

and it must be running as a primary application. It can be defined in AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.my_app">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

   <application
        android:label="auto"
        android:name=".MyApp"
        android:hardwareAccelerated="true"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>

Don't use MapKitFactory.setApiKey() in the MainActivity I think it should work.