Описание ошибок

Внимание.

Это архивная версия документации. Актуальная документация по всем платформам находится здесь.

Ниже описаны распространенные ошибки, которые могут возникнуть при работе с AppMetrica SDK на Android.

  1. Ошибка при добавлении библиотеки в проект
  2. Ошибка инициализации AppMetrica со сторонними библиотеками
  3. Некорректная длительность пользовательской сессии при ручном отслеживании
  4. Высокое энергопотребление библиотекой AppMetrica

Ошибка при добавлении библиотеки в проект

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)

Данная ошибка сообщает, что превышен лимит методов на этапе обработки DexIndexOverflowException. Рекомендуем пересмотреть используемые библиотеки — возможно, они очень тяжеловесны. Если их нельзя заменить легковесными аналогами, то можно использовать несколько DEX-файлов. Это может увеличить время загрузки приложения.

Ошибка инициализации AppMetrica со сторонними библиотеками

Код, который добавлен в метод Application.onCreate(), выполняется для всех процессов. Если после интеграции сторонней библиотеки (например, Firebase Cloud Messaging) возникает ошибка инициализации, убедитесь, что сторонняя библиотека инициализируется только в главном процессе.

Примеры ошибок:

  • Unable to create application your.package.name.YourApp: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process your.package.name:Metrica. Make sure to call FirebaseApp.initializeApp(Context) first.
  • android.database.sqlite.SQLiteException: table httpauth already exists (code 1)
  • Fatal Exception: java.lang.RuntimeException: Using WebView from more than one process at once with the same data directory is not supported.
  • ANR at com.google.android.gms.ads.*

Чтобы исправить ошибку, реализуйте проверку главного процесса перед инициализацией сторонних библиотек:

class MyApplication extends Application {
    @Override
    public void onCreate() {
        if (isMainProcess()) {
            // Initializing third-party libraries after verification.
        }
    }
}
Скопировано
Примечание. Проверку главного процесса реализуйте самостоятельно. Например, как это сделано в ответе на Stack Overflow.

Некорректная длительность пользовательской сессии при ручном отслеживании

При неправильной реализации ручного отслеживания сессии возможно неточное определение ее длительности.

Если данные о длительности сессий выглядят некорректно, убедитесь, что при завершении пользовательской сессии всегда вызывается метод YandexMetrica.pauseSession(). Если метод не вызван, библиотека считает сессию активной и совершает регулярный обмен данными с серверной частью AppMetrica.

Рекомендуется проверить длительности тайм-аута сессии. Он устанавливается с помощью метода withSessionTimeout(). Тайм-аут указывает временной интервал, в течение которого сессия будет считаться активной даже после закрытия приложения.

Высокое энергопотребление библиотекой AppMetrica

При повышенном энергопотреблении библиотекой, убедитесь, что при завершении пользовательской сессии всегда вызывается метод YandexMetrica.pauseSession(). Если метод не вызван, библиотека считает сессию активной и совершает регулярный обмен данными с серверной частью AppMetrica.

Рекомендуется проверить длительности тайм-аута сессии. Он устанавливается с помощью метода withSessionTimeout(). Тайм-аут указывает временной интервал, в течение которого сессия будет считаться активной даже после закрытия приложения.

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