Android-приложение ClassNotFoundException для основной деятельности - PullRequest
20 голосов
/ 27 мая 2011

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

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.company.app/com.company.app.MainActivity}: java.lang.ClassNotFoundException: com.company.app.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.company.app-1/pkg.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2755)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2854)
at android.app.ActivityThread.access$2300(ActivityThread.java:136)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:5068)
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.company.app.MainActivity in loader dalvik.system.PathClassLoader[/mnt/asec/com.company.app-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:1034)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2747)
... 11 more

Я нашел, что есть связанный ответ: ClassNotFoundException Android

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

Ответы [ 12 ]

20 голосов
/ 28 января 2013

У меня была точно такая же проблема. Внезапно мое приложение перестало работать. Я не внес никаких изменений в манифест, но с какой-то случайностью пропустил первый ряд:

<?xml version="1.0" encoding="utf-8"?>

Это вызвало ClassNotFoundException для активности запуска. Я боролся с этим в течение нескольких часов, и я упускал это из виду каждый раз, когда проверял манифест на предмет возможной ошибки.

Странная вещь произошла после того, как я снова удалил эту строку. Сюрприз, приложение сюрприз все еще работает. (и я не забыл пересобрать приложение)

Надеюсь, это поможет кому-то сэкономить несколько часов.

10 голосов
/ 27 мая 2011

Я получаю эту ошибку, когда мой класс неправильно определен в манифесте, обычно потому, что я не указал правильное пространство имен, как в:

    <activity android:name="com.company.project.main.MyMainActivity" ...>

, а не

    <activity android:name="MyMainActivity" ...>

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

6 голосов
/ 27 мая 2011

Пожалуйста, закройте свое затмение и откройте. Очистите свой проект и сделайте обновление. Тогда беги и смотри.

3 голосов
/ 06 декабря 2013

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

myproject/libs/android-support-v4.jar 
3rdpartylib/libs/android-support-v4.jar

Когда я обновил библиотеку более новой версией, библиотека поддержки также была обновлена ​​- но не в моем проекте. После этого я не смог запустить приложение с этой ошибкой. Сделав обе библиотеки одинаковыми (копия), все было в порядке.

2 голосов
/ 18 июля 2014

В eclipse проверьте Свойства> Путь сборки Java> Исходный код и посмотрите, всегда ли папка вывода используется по умолчанию (/bin/classes).

Для меня это была проблема из-за плагина maven:всякий раз, когда я щелкаю правой кнопкой мыши> Maven> Обновить проект ...> Хорошо, он изменяет выходную папку папки src на target / classes, вызывая ClassNotFoundException.

1 голос
/ 22 августа 2015

Ни один из приведенных выше ответов для меня не помог, предоставив мое решение, если в будущем у кого-то будет свободное время.

Что, видимо, сработало для меня, так это удаление дополнительной поддержки lib v4 jar в моем проекте.

После того, как я обновил библиотеку поддержки с помощью инструментов Android, мне пришлось исправить несоответствия jar во многих используемых мной библиотеках и указать их все на один и тот же jar в папке android-sdks.

Я также случайно добавил его в свой проект, и по какой-то причине мой класс MainActivity не был найден во время выполнения, поскольку jar также находился в используемой мной библиотеке android-support-v7-appcompat.

Нет ошибок при затмении вообще.

Я удалил jar из своего проекта и проверил jar в библиотеке appcompat v7 на вкладке экспорта, чтобы он был доступен и для моего проекта, и вуаля, приложение работает.

1 голос
/ 16 июля 2014

Я столкнулся с этой проблемой, и она была исправлена ​​с помощью this .

Я не проверял одну внешнюю библиотеку в разделе «Заказ и экспорт» и получал ошибку.

1 голос
/ 24 июня 2014

У меня была эта проблема последние пару дней.Я мог запускать свое приложение в каждой тестовой среде, я мог экспортировать apk релиза, а также устанавливать и запускать его в каждой тестовой среде, но когда я загружал apk в магазин Play и устанавливал из магазина Play, приложение четырежды закрывалось, вызывая ClassNotFoundException,Оказалось, что в моем проекте я отправлял данные из нескольких форм в веб-API, и для этого требовалось несколько внешних библиотек.Сначала я просто включил все mim4j, httpclient и httpcore .jars (оказывается много банок).

После удаления почти всех из них по одному и проверки того, будет ли мой проект по-прежнему собираться, у меня осталась только одна банка , ЧТО БЫ ТРЕБУЕТСЯ .Забрать удалить все банки, которые не требуются для сборки.Затем я протестировал приложение и оказалось, что мне нужно было добавить один из jar-файлов назад, потому что на его ресурсы ссылался тот, который был необходим для сборки проекта.Обязательно проверяйте каждую функцию вашего приложения после удаления jar-файлов.

Затем я прошел каждый библиотечный проект, который включал, и щелкнул правой кнопкой мыши на project -> properties -> java build path -> order and export и установил все флажки ДЛЯ КАЖДОЙ БИБЛИОТЕКИ. и МОЙ СОБСТВЕННЫЙ ПАКЕТ .

Затем я сделал project -> clean для каждого включенного проекта и основного проекта.

Затем я экспортировал apk ипоместите пакет для бета-тестирования, и он, наконец, сработал на пользовательских устройствах.

0 голосов
/ 20 декабря 2018

Я сделал копию / вставку следующих папок в новый проект , сохранив то же имя пакета , и решил:

  • .. / SRC / отладки
  • .. / SRC / главный
  • .. / SRC / выпуск

И наконец я добавил файл зависимостей build.gradle.

GL

0 голосов
/ 13 мая 2018

У меня то же самое, когда я запускаю тесты Robolectric. Собственно, тестовый путь к классам включает в себя jar с android.com.Activity, которая не была основана. Решение в моем случае - понизить JAVA_HOME с 10-й версии JDK, которая используется в проекте Maven.

...