сбои classnotfound не отображаются в Crashlytics, но в консоли Google Play

Мы пытаемся отладить сбой, который происходит у некоторых пользователей, но не можем точно понять, что это такое.

В консоли Google Play мы видим это:

java.lang.RuntimeException:  
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3331)
  at android.app.ActivityThread.-wrap20 (ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1734) 
  at android.os.Handler.dispatchMessage (Handler.java:102) 
  at android.os.Looper.loop (Looper.java:154)
  at android.app.ActivityThread.main (ActivityThread.java:6688)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1468)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:380)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3326)

У нас в проекте настроен Crashlytics, и это первое, что загружается при запуске приложения. Подозреваю, что возможно один из классов отсутствует в манифесте, но мы его посмотрели (даже разобрали APK на всякий случай) и они все есть.

Мы подозреваем, что, возможно, это класс, который одна из активностей использует во время инициализации, но некоторые из них являются сторонними SDK, поэтому у нас нет доступа к их источнику.

Есть ли способ увидеть имя класса, которое не было найдено? Ошибки не отображаются на crashlytics, и мы не можем воспроизвести их ни на одном из имеющихся у нас устройств/эмуляторов.

Спасибо!

Редактировать: частичное разрешение

Проблема оказалась в используемом нами пакете уведомлений, для которого требуются записи для конкретного поставщика (которых у нас нет на наших тестовых устройствах) в AndroidManifest.xml. После повторной интеграции почти всех наших сторонних сервисов мы в конце концов увидели, что отчет о сбое исчез.

Нам не удалось достичь нашей общей цели (получить текст исключения, а не только трассировку стека исключений, из исключений, зарегистрированных в консоли разработчика Google Play), поэтому нет «хорошего» способа (насколько нам известно) найти какой класс отсутствовал. Довольно разочаровывающий ТБХ.


person Noam    schedule 18.03.2018    source источник
comment
привет, не могли бы вы указать, какая версия ОС Android имеет этот сбой? Запустили ли вы «lint» в своем приложении, чтобы оно могло определить, есть ли какой-либо вызов API во время выполнения, который недоступен в предыдущих версиях Android?   -  person user6327816    schedule 23.03.2018
comment
Это происходит практически на всех версиях андроида. Мы не можем запустить lint, так как APK генерируется Adobe Air.   -  person Noam    schedule 26.03.2018
comment
Возможно, когда вы добавили Crashlytics, он начал падать, поэтому Crashlytics является корнем проблемы.   -  person Wrobel    schedule 28.03.2018
comment
См. это сообщение SO: stackoverflow. com/questions/36881299/   -  person Sandeep R Venkatesh    schedule 28.03.2018


Ответы (3)


Таким образом, не все пользователи сталкиваются с этим исключением. Очевидно, что во время выполнения для этих пользователей такой класс не известен загрузчику. Я думаю, что вы используете библиотеку (например, lib.so, либо ваш собственный код, либо стороннюю библиотеку), собственный код которой не поддерживает определенную архитектуру (например, MIPS или Intel), и поэтому такие устройства получают исключение . Просто что-то для расследования. Существуют эмуляторы для разных архитектур, поэтому вам может даже не понадобиться реальное оборудование, чтобы проверить, является ли это основной причиной.

person Kaamel    schedule 27.03.2018

Crashlytics не будет обновляться немедленно.

Этот сбой будет сообщен в Crashlytics, как только пользователь снова откроет приложение после сбоя.

Возможные случаи

  1. Ваше разбитое устройство может не открыть приложение после сбоя
  2. Может быть удален после сбоя
person Ranjith Kumar    schedule 28.03.2018

Попробуйте это в build.gradle:

android {
    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 26
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

и в классе application:

public class MyApplication extends Application {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}
person Sagar Gadani    schedule 28.03.2018