Приложение 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
но вопрос в том, что мое исключение возникает до того, как какая-либо строка кода я напишу, так как я могу обеспечить загрузку загрузчика классов?
Ответы
Ответ 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