Отчеты об ошибках ClassNotFoundException при обновлении приложения Android - PullRequest
8 голосов
/ 24 апреля 2011

Я видел довольно много тем о ClassNotFoundException и Android, но мне еще предстоит найти то, что, по моему мнению, является причиной того, что я испытываю.

У меня есть приложение - Виджет счетчика данных - на Android Маркете.Он имеет более 250 тыс. Загрузок, и каждый раз, когда я выпускаю новую версию, я получаю несколько (1-5) сообщений об ошибках ClassNotFoundException на свою консоль разработчика в Android Market.

29 отчетов не указаны ('ДРУГОЕ') устройства, в то время как два из Nexus One.Есть два пользовательских сообщения: «Сбои при запуске» и «Во время установки обновления».

Все отчеты относятся к моим получателям (расширяет BroadcastReceiver).Один из приемников срабатывает относительно часто, поскольку именно он запускает службу, которая считывает и хранит данные об использовании устройства Android.У меня такое ощущение, что может случиться так, что будильник установлен (с помощью AlarmManager) для получателя, а затем пользователь / устройство обновит приложение, и класс не будет найден - либо потому, что он находится в другом физическом пакете, либо что это происходитмомент, когда устройство делает обмен.Может ли это быть так?И если да, есть ли какие-то способы обойти это?В противном случае я не могу понять, почему почти все отчеты (скажем, 90%) приходят в ту же или в следующие пару дней после нового выпуска.

Трассировка стека для одного из моих получателей (другие дают ту же трассировку стека, что и другиечем имя класса):

java.lang.RuntimeException: Unable to instantiate receiver com.roysolberg.android.datacounter.receivers.CounterReceiver: java.lang.ClassNotFoundException: com.roysolberg.android.datacounter.receivers.CounterReceiver in loader dalvik.system.PathClassLoader[/data/app/com.roysolberg.android.datacounter-1.apk]
 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2789)
 at android.app.ActivityThread.access$3200(ActivityThread.java:125)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:123)
 at android.app.ActivityThread.main(ActivityThread.java:4627)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:521)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.roysolberg.android.datacounter.receivers.CounterReceiver in loader dalvik.system.PathClassLoader[/data/app/com.roysolberg.android.datacounter-1.apk]
 at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2780)
 ... 10 more

Ответы [ 2 ]

2 голосов
/ 25 апреля 2012

Примерно через год после обновления моих приложений я понимаю проблему, и, похоже, ее не существует:

Мои приложения (в зависимости от настроек пользователя) используют Alarm Manager для регулярного запуска определенных задач. Когда приложение обновляется, оно недоступно в течение короткого периода времени, и если срабатывает сигнал тревоги, это вызывает эту конкретную проблему! Затем приложение снова становится доступным, и все идет как обычно.

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

Теперь в сообщениях отчета FC я иногда вижу «сбой при обновлении» ... Подтверждает это.

Кроме того, что касается перехода на SD, я специально исключаю его из файла манифеста, но некоторые приложения на рынке позволяют принудительно перемещать приложение. Поэтому, если вы используете виджеты или сигналы тревоги, вы также можете получать такие отчеты!

1 голос
/ 24 апреля 2011
...