Подтвердить что ты не робот

Приложение Android ClassNotFoundException для основной деятельности

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

в отличие от

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

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

Ответ 3

Закройте свое затмение и откройте. Очистите проект и сделайте обновление. Затем запустите и посмотрите.

Ответ 4

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

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

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

Ответ 5

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

Для меня это была проблема из-за плагина maven: всякий раз, когда я нажимаю правой кнопкой мыши > Maven > Update Project... > Ok, он меняет папку вывода папки src на цель/классы, вызывая ClassNotFoundException.

Ответ 6

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

После того, как вы удалили почти все из них один за другим и увидели, что мой проект все еще будет построен, я остался только с одним банком , КОТОРЫЙ НЕОБХОДИМО ТРЕБУЕТСЯ. Убрать - удалить все банки, которые не требуется строить. Затем я протестировал приложение и выяснил, что мне нужно добавить одну из банок обратно, потому что на ресурсы ссылался тот, который был необходим для создания проекта. Обязательно проверяйте каждую функцию своего приложения после удаления баннеров.

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

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

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

Ответ 7

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

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

Ответ 8

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

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

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

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

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

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

Ответ 9

Я столкнулся с этой проблемой. Оказывается, это связано с тем, что я переместил мою MainActivity в новый пакет.

Что я сделал, это переместить его из

com.example.MainActivity

в

Activity

поэтому в моем манифесте это выглядело так:

 android:name="Activity.MainActivity"`

Решил его, переместив его обратно в исходный пакет. Это также можно решить, переименовав ваши пакеты правильно:

Например: com.example.Activity.MainActivity

Надеюсь, это поможет кому-то.

Ответ 10

Благодаря управлению версиями, я заметил, что у меня не было этих строк в моем XML файле .classpath:

<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>

Они вызвали класс, не найденный для основного действия.

Ответ 11

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

Ответ 12

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

  • .. /src/debug
  • .. /src/main
  • .. /src/release

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

GL