Ошибка «Невозможно создать действие» - PullRequest
27 голосов
/ 17 февраля 2011

В одном из моих приложений для Android около 100 000 пользователей, и примерно 10 раз в неделю я получаю следующее исключение, о котором мне сообщают через маркетинговый инструмент Google.

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.rebm.asp/org.rebm.asp.MainActivity}:
  java.lang.ClassNotFoundException: org.rebm.asp.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/org.rebm.asp-1/pkg.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2753)
at android.app.ActivityThread.access$2500(ActivityThread.java:129)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2107)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4701)
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:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: org.rebm.asp.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/org.rebm.asp-1/pkg.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.Instrumentation.newActivity(Instrumentation.java:1021)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2651)
... 11 more

При поиске в Интернете эта ошибка обычно указывает, что что-то не так с файлом манифеста и используемыми именами пакетов. Однако я не могу воспроизвести эту ошибку на своих устройствах или на эмуляторе. Я знаю об этой ошибке только через инструмент рынка. Все, что я могу сделать, - это то, что это редкая ошибка, потому что я знаю, что многие люди используют приложение, и ни один из обзоров не указывает на его сбой.

Кто-нибудь знает, в чем может быть проблема или как я могу ее диагностировать?

Ответы [ 6 ]

15 голосов
/ 01 апреля 2011

Трассировка стека, указанная в вопросе, содержит доказательство того, что проблема связана с переносом приложения на SD-карту:

java.lang.RuntimeException: невозможно инстанцировать деятельность ComponentInfo {org.rebm.asp / org.rebm.asp.MainActivity}: java.lang.ClassNotFoundException: org.rebm.asp.MainActivity в загрузчике dalvik.system.PathClassLoader [/mnt/asec/org.rebm.asp-1/pkg.apk]

Как видите, путь к вашему приложению содержит / mnt / asec , который является точкой монтирования безопасного приложения Android.

Чтобы проверить, возникает ли эта проблема из-за Apps2SD, вам следует проверить, все ли трассировки стека включают каталог / mnt / asec в пути к вашему приложению. Если все они таковы, вы можете быть уверены, что это ошибка Apps2SD.

Как уже говорили другие, подобные проблемы иногда возникают из-за того, что SD-карта недоступна при загрузке приложения или из поврежденного раздела asec на SD-карте.

Ваше приложение каким-либо образом регистрируется для запуска при загрузке или это какой-то виджет, который система будет пытаться загрузить, даже если SD-карта еще не установлена? Если это так, возможно, вам следует отключить опцию переноса приложения на SD-карту.

2 голосов
/ 29 марта 2011

Ну, есть пара предложений, которые могут помочь вам отладить ваше приложение. Надеюсь, они решат вашу проблему. Кроме того, опубликуйте свой XML-файл манифеста Android и фрагмент метода onCreate метода MainActivity, чтобы мы также могли помочь вам в его отладке и сузить возможности ...

Предложения:

1) В вашем Android XML проверьте, равна ли ваша минимальная версия Sdk ( android: minSdkVersion = "3" ) 3? Если это изменить его на 7+. Иногда я находил этот трюк полезным, когда справлялся с редкими проблемами.

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

3) Очистите проект и соберите его снова, чтобы R.java обновился и не использовал кэшированные файлы.

4) Перенесите свой проект, создайте один новый проект и скопируйте туда все свои файлы. Это также решает редкие проблемы.

5) По словам одного пользователя:

Я только что получил ту же ошибку (Невозможно создать экземпляр активности ...) с Opera Mini. Opera Mini была на SD-карте (перенесена на SD-карту в настройках приложения). Кажется, ошибка связана с тем, что я вчера поменял карту SD. Устройство было выключено, я скопировал все данные со старой карты на новую (с помощью команды cp -a), затем вставил новую карту и снова запустил устройство. Кажется, все работает, как ожидалось, но теперь я вижу, что все приложения на SD-карте вылетают с одной и той же ошибкой.

Device: HTC Desire HD (Android 2.2)
Old SDHC card: SanDisk 8GB class 4
New SDHC card: Kingston 16GB class 4

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

См. Также: http://android -developers.blogspot.com / 2010/07 / apps-on-sd-card-details.html

It has always been the case that when you swap SD cards on an Android device, if you physically copy the contents of the old card to the new one, the system will use the data on the new card as if nothing had changed. This is also true of apps which have been installed on the SD card."

Это кажется неправильным.

Надеюсь, что один из них решит вашу проблему.

2 голосов
/ 16 марта 2011

Наличие одной и той же «редкой» проблемы во всех опубликованных играх.

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

Другое предположение, что приложение каким-то образом загружается или устанавливается несколько раз.

У меня не было возможности воспроизвести это, поэтому я тоже не могу его зафиксировать.

1 голос
/ 29 марта 2011

У меня была эта проблема, но не с активностью.Исправлено с помощью обходного пути:

ClassLoader myClassLoader = TroubleClass.class.getClassLoader();
Thread.currentThread().setContextClassLoader(myClassLoader);
0 голосов
/ 11 октября 2013

Может случиться так, что приложение прекрасно работает на вашем затмении и мобильном , когда вы устанавливаете его из затмения , но может вылетать, когда на рынке (произошло для меня), если то же самое произойдет с вами, вам нужно будет сделать 2 вещи , и вы выйдете из этой ситуации.

  1. Очистить проект и восстановить. (Использование Project-Clean)
  2. Удалить и повторно включить библиотеки , если таковые имеются.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...