Java.lang.ClassNotFoundException в рабочем приложении

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

java.lang.RuntimeException: Unable to instantiate application cz.teamnovak.droid.Novak ESC Track guide: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.apk]
    at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:649)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4232)
    at android.app.ActivityThread.access$3000(ActivityThread.java:125)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
    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:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-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.Instrumentation.newApplication(Instrumentation.java:942)
    at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:644)
    ... 11 more

Любая идея, что может вызвать это?

Ответ 1

Да, у меня была такая же проблема. Это связано с тем, что я указал атрибут android:name в приложении node в файле манифеста.

Ваш файл манифеста Android, вероятно, выглядит примерно так:

   <application 
       android:name="Novak ESC Track guide" 
       android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:description="@string/help_text" >

Не используйте атрибут android:name! если вы не внедрили собственный объект приложения.

Атрибут application:name не имеет ничего общего с именем вашего приложения. Это имя определенного класса для загрузки в качестве экземпляра Application. Вот почему вы получили бы ClassNotFoundException, если бы этот класс не существовал.

Вместо имени приложения используйте атрибут android:label в этом же приложении node.

Удалите его, и он должен работать:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:description="@string/help_text" >

Ответ 2

Что-то подобное произошло, когда я изменил цель сборки на 3.2. После копания я обнаружил, что a назвал папку jar lib lib вместо "libs". Я просто переименовал его в libs и обновил ссылки на пути сборки Java, и все снова работало. Может быть, это поможет кому-то...

Ответ 3

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

  • Если имя пакета com.test, имена действий должны быть .ActivityName (с ведущей точкой), а не только ActivityName.

  • Для некоторых классов, которые чаще всего появлялись в журналах, имя класса было указано как com.test.Name, тогда как оно должно было быть .Name.

Я предполагаю, что многие реализации Android справляются с этими незначительными проблемами успешно (поэтому исключение никогда не происходило при тестировании), в то время как другие немногие бросают исключение.

Ответ 4

Имела ту же ошибку: java.lang.RuntimeException: Не удалось создать экземпляр активности (classnotfound) ПЕРВАЯ попытка изменить платформу сборки (2.3.3 → 2.2 → 2.3.3) работала для меня.

Ответ 5

Это мое наблюдение в отношении ошибки. Недавно я обновил ADT до 22.0.1. Я получаю следующую ошибку, когда импортировал мои предыдущие проекты "E/AndroidRuntime (24807): вызвано: java.lang.ClassNotFoundException: com.sherl.sherlockfragmentsapp.StartActivity в загрузчике dalvik.system.PathClassLoader [/data/app/com.sherl.sherlockfragmentsapp-1.apk]"

Затем я изменил "Properties- > Java Build Path- > Order and Export" следующим образом Невозможно добавить изображение из-за правил форума.

  • Частные библиотеки Android - отмечены
  • Android 4.2.2 - снят флажок
  • Android Dependencies - отмечен
  • /src - selected
  • /gen - selected

Это решило проблему. Надеюсь, это поможет вам, ребята.

Ответ 6

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

Итак, я получал эту ошибку, и через несколько часов смущенно понял, что я снял флажок "Project > Build Automatically". Поэтому, хотя у меня не было ошибок компиляции, вот почему я получал эту ошибку. Все началось, как только я понял, что на самом деле я не строил проект до развертывания: -/

Хорошо, что моя история: -)

Ответ 7

У вас возникла такая проблема сегодня после обновления до последнего ADT/SDK. Взял меня довольно долго. Проверено, что я использовал google-apis (для карт), использует-библиотеку, очистил проект и т.д.

Удаление .project и добавление нового (создайте новый проект для Android), наконец, решило его.

Ответ 8

У меня иногда возникает проблема с eclipse. Для меня это исправлено - перейти в Project Properties/Android и изменить API-интерфейс сборки для другой версии и опубликовать ее. Я найду, что исправил его, затем я могу изменить его на желаемую цель сборки.

или

Вам может потребоваться проверить proguard.cfg.

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

С этим я немного потрудился после того, как мое приложение работало напрямую с эмулятором или устройством из eclipse. Проблема, с которой я столкнулась, заключалась в том, что после того, как приложение было опубликовано (т.е. Прошло через proguard) и запущено на устройстве, в нем отсутствовали классы, которые содержались в проекте. Их каким-то образом лишили.

Моя проблема может быть вызвана, когда я попытался использовать IntelliJ и переключился обратно на затмение.

Вот файл proguard, который работал у меня:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembers class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

Ответ 9

В моем случае мне пришлось добавить android:name=".activity.SkeletonAppActivity" вместо android:name=".SkeletonAppActivity" в файле манифеста для основного действия. SkeletonAppActivity был в другом пакете из класса приложения. Удачи!

Ответ 10

Убедитесь, что android:hasCode не установлен в false в вашем файле манифеста. Это и решило проблему для меня!

Ответ 11

Я получил эту ошибку, когда я запустил приложение в более ранних версиях Android. Я думал, что SearchView был обратно совместим с Android 1.5, но был создан в версии 3.0. Я удалил ссылку из кода, и он сработал.

Ответ 12

У вас есть java.lang.ClassNotFoundException. Это означает, что класс отсутствует во время выполнения приложения. Вы должны проверить, что вы добавили все свои библиотеки в путь сборки.

Щелкните правой кнопкой мыши свой проект → свойства → путь сборки java → библиотеки, добавьте свои библиотеки или создайте их, содержащие ваши классы, и включите экспорт заказов для своих библиотек.

Ответ 13

В моем случае значок приложения вызывал ошибку:

<application
    android:name="com.test.MyApp"
    android:icon="@drawable/myicon"

Почему? Потому что я помещаю значок только в папку "drawable", и я использую устройство для тестирования с высоким разрешением, поэтому он выглядит в папке "drawable-hdpi" для значка. Поведение по умолчанию для всего остального - использовать значки из "drawable", если они не находятся в "drawable-hdpi" . Но для значка запуска это не кажется действительным.

Итак, решение состоит в том, чтобы поместить копию значка (с тем же именем, конечно) в "drawable-hdpi" (или в зависимости от поддерживаемых разрешений, которые есть у устройств).

Ответ 14

Я использовал метод супертипа, который был объявлен "final" в одном из моих действий (в частности, метод isResumed() "). Фактическая ошибка отображается в LogCat только после перезапуска моего устройства разработки.

Ответ 15

Ошибка Class Not Found показывает, что ваши файлы классов отсутствуют. Перейдите в Свойствa > Путь сборки Java и добавьте свой пакет, содержащий ваши java файлы, на вкладку Источник, если она отсутствует. Затем создайте свой проект. Это создаст отсутствующие файлы .class.

Ответ 16

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

Обзор некоторых возможных причин.

Отсутствует библиотека

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

Очистка и создание проекта может помочь, если это локальная проблема и убедитесь, что у вас установлена ​​последняя версия SDK и IDE.

В этих случаях используется один класс вашего приложения или библиотека, используемая в вашем приложении, которая вызывает ошибку. Это важное различие со следующей точкой, в которой точка входа (Activity with MAIN intent или ваш пользовательский сервис/объект приложения) не найден.

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

не удалось создать экземпляр приложения - ClassNotFoundException Активность Android ClassNotFoundException - все пробовал Android ClassNotFoundException

Основная активность или приложение не найдено

Неверная настройка AndroidManifest.xml

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

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

Ive отредактировал этот ответ, это важная часть:

Не используйте атрибут android: name! если вы не внедрили пользовательский объект приложения.

Атрибут application: name не имеет ничего общего с именем вашего приложение. Это имя определенного класса для загрузки в качестве приложения пример. Вот почему вы получите ClassNotFoundException, если это класса не будет.

Для имени приложения используйте атрибут android: label на этом же приложение node.

Подавлено: java.io.IOException: невозможно открыть файл DEX

Теперь это становится интересным! Это было частью трассировки стека, записанной в моем случае через игровой магазин. Поэтому я могу создать сборку и выполнить ее на своем устройстве без ошибок (тогда как все предыдущие ошибки предотвратили бы любой прогон).

Был сделан важный комментарий к следующему SO-вопросу Android-приложение ClassNotFoundException, Не удалось создать приложение

Похоже, что системе не удалось открыть файл приложения dex java.io.IOException: не удалось открыть файл DEX, это до того, как загрузится какой-либо из ваших классов, поэтому он не имеет никакого отношения к тому, как вы определяете свой класс приложения в манифесте. - user2046264 27 Фев '14 в 2:25

Важной частью здесь является подавленное исключение IOException. Это означает, что операция ввода-вывода завершилась неудачно. Примерами операций ввода-вывода являются вызовы сети и хранилища.

Еще один отчет об ошибке, который идет в этом направлении, указан в Android, чтобы не удалось создать экземпляр приложения java.lang.ClassNotFoundException:, где роль внешнего хранилища, предоставляемого sdcard упоминается.

Некоторые другие подобные вопросы указывают на то, что это может быть ошибка пользователя. "/mnt/asec/..." указывает, что приложение запускается с SD-карты. Если SD-карта удалена, это может привести к этой ошибке. Сторонние приложения или укорененные устройства, вероятно, могут перенести приложение на SD-карту, даже если оно не разрешено манифестом.

Если вы отчаянно прочитали все ответы на этот вопрос, так как есть и другие пути. Подумайте о полной спецификации пакета, использовании синглтонов и т.д.

Дело в том, что и сеть, и хранилище являются IO.

В моем конкретном случае я проверил все устройства, сообщившие об этой ошибке, и обнаружил, что у них есть внешняя поддержка хранилища. Таким образом, пользователь может установить приложение и перенести его на внешнее хранилище, удалить SD-карту и получить эту ошибку (просто теория, не протестированная).

Подробнее о параметрах installLocation см. http://developer.android.com/guide/topics/data/install-location.html

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

Мне показалось, что ошибка произошла больше в то время, когда было выпущено обновление. Это может поддержать теорию о том, что пользователь получает обновление приложения, загружает это обновление, которое каким-то образом повреждается. Установка идет хорошо, но первое выполнение приложения приводит к ошибке (опять же просто теории, а не проверке).

Другие ресурсы

Наконец, 2 ресурса без SO, которые могут вам помочь:

https://groups.google.com/forum/#!topic/android-developers/JC7_qqwBRjo https://code.google.com/p/android/issues/detail?id=72121

Ответ 17

Используете ли вы свой код в разных средах, допустим, используя Dropbox или что-то в этом роде? Вы используете какую-либо библиотеку или что-то подобное? У меня было много неприятностей после обмена файлами рабочей области, и я исправил его реконфигурирование зависимостей. Надеюсь, это поможет кому-то!

Ответ 18

Проверьте, совпадает ли имя пакета в классе с именем пакета в файле манифеста. Это сработало для меня

Ответ 19

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

Ответ 20

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

Я обнаружил, что я пропустил Java-конструктор в своем .project

Если что-то отсутствует в вашем buildSpec, закройте Eclipse, убедитесь, что все на месте и снова запустите Eclipse.

        <buildSpec>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>org.eclipse.jdt.core.javabuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
            <buildCommand>
                    <name>com.android.ide.eclipse.adt.ApkBuilder</name>
                    <arguments>
                    </arguments>
            </buildCommand>
    </buildSpec>

Ответ 21

У меня такая же проблема в android os версии 4.1.2

добавить строку ниже к AndroidManifest.xml ниже android:label="@string/app_name" в теге приложения

android:name="android.support.multidex.MultiDexApplication"

Это может помочь кому-то с той же проблемой.

Ответ 22

Для меня "закрытие" приложения из Eclipse и "повторное открытие" проекта разрешило проблему.