- Java.lang.ClassNotFoundException в рабочем приложении
- Не используйте атрибут android:name ! если вы не внедрили собственный объект приложения.
- Вместо имени приложения используйте атрибут android:label в этом же приложении node.
- Отсутствует библиотека
- Основная активность или приложение не найдено
- Неверная настройка AndroidManifest.xml
- Подавлено: java.io.IOException: невозможно открыть файл DEX
- Другие ресурсы
Java.lang.ClassNotFoundException в рабочем приложении
Я создал и опубликовал свое первое приложение для Android. Это очень просто. Он отлично работает на симуляторе и некоторых телефонах, но я получаю эту ошибку:
Любая идея, что может вызвать это?
Да, у меня была такая же проблема. Это связано с тем, что я указал атрибут android:name в приложении node в файле манифеста.
Ваш файл манифеста Android, вероятно, выглядит примерно так:
Не используйте атрибут android:name ! если вы не внедрили собственный объект приложения.
Атрибут application:name не имеет ничего общего с именем вашего приложения. Это имя определенного класса для загрузки в качестве экземпляра Application . Вот почему вы получили бы ClassNotFoundException , если бы этот класс не существовал.
Вместо имени приложения используйте атрибут android:label в этом же приложении node.
Удалите его, и он должен работать:
Что-то подобное произошло, когда я изменил цель сборки на 3.2. После копания я обнаружил, что a назвал папку jar lib lib вместо “libs”. Я просто переименовал его в libs и обновил ссылки на пути сборки Java, и все снова работало. Может быть, это поможет кому-то…
У нас есть несколько проектов, в которых эта проблема время от времени регистрировалась на Android Market. Я обнаружил следующие проблемы в манифесте:
Если имя пакета com.test, имена действий должны быть .ActivityName (с ведущей точкой), а не только ActivityName .
Для некоторых классов, которые чаще всего появлялись в журналах, имя класса было указано как com.test.Name , тогда как оно должно было быть .Name .
Я предполагаю, что многие реализации Android справляются с этими незначительными проблемами успешно (поэтому исключение никогда не происходило при тестировании), в то время как другие немногие бросают исключение.
Имела ту же ошибку: java.lang.RuntimeException: Не удалось создать экземпляр активности (classnotfound)
ПЕРВАЯ попытка изменить платформу сборки (2.3.3 → 2.2 → 2.3.3) работала для меня.
Это мое наблюдение в отношении ошибки. Недавно я обновил 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
Это решило проблему. Надеюсь, это поможет вам, ребята.
Я знаю, что на этот вопрос был дан ответ, и, скорее всего, это не так. Но я получал эту ошибку, и решил, что я расскажу, почему в случае, если это может быть полезно кому-либо еще.
Итак, я получал эту ошибку, и через несколько часов смущенно понял, что я снял флажок “Project > Build Automatically”. Поэтому, хотя у меня не было ошибок компиляции, вот почему я получал эту ошибку. Все началось, как только я понял, что на самом деле я не строил проект до развертывания: -/
Хорошо, что моя история: -)
У вас возникла такая проблема сегодня после обновления до последнего ADT/SDK. Взял меня довольно долго. Проверено, что я использовал google-apis (для карт), использует-библиотеку, очистил проект и т.д.
Удаление .project и добавление нового (создайте новый проект для Android), наконец, решило его.
У меня иногда возникает проблема с eclipse. Для меня это исправлено – перейти в Project Properties/Android и изменить API-интерфейс сборки для другой версии и опубликовать ее. Я найду, что исправил его, затем я могу изменить его на желаемую цель сборки.
Вам может потребоваться проверить proguard.cfg.
Предполагая, что вы правильно связали свои библиотеки и что в ваших библиотечных проектах есть код, который вам нужен для экспорта, следующий шаг, который вы можете сделать, это проверить ваши настройки proguard и убедиться, что вы не удаляете классы, которые вам нужны.
С этим я немного потрудился после того, как мое приложение работало напрямую с эмулятором или устройством из eclipse. Проблема, с которой я столкнулась, заключалась в том, что после того, как приложение было опубликовано (т.е. Прошло через proguard) и запущено на устройстве, в нем отсутствовали классы, которые содержались в проекте. Их каким-то образом лишили.
Моя проблема может быть вызвана, когда я попытался использовать IntelliJ и переключился обратно на затмение.
Вот файл proguard, который работал у меня:
В моем случае мне пришлось добавить android:name=».activity.SkeletonAppActivity»
вместо android:name=».SkeletonAppActivity» в файле манифеста для основного действия.
SkeletonAppActivity был в другом пакете из класса приложения. Удачи!
Убедитесь, что android:hasCode не установлен в false в вашем файле манифеста. Это и решило проблему для меня!
Я получил эту ошибку, когда я запустил приложение в более ранних версиях Android. Я думал, что SearchView был обратно совместим с Android 1.5, но был создан в версии 3.0. Я удалил ссылку из кода, и он сработал.
У вас есть java.lang.ClassNotFoundException. Это означает, что класс отсутствует во время выполнения приложения. Вы должны проверить, что вы добавили все свои библиотеки в путь сборки.
Щелкните правой кнопкой мыши свой проект → свойства → путь сборки java → библиотеки, добавьте свои библиотеки или создайте их, содержащие ваши классы, и включите экспорт заказов для своих библиотек.
В моем случае значок приложения вызывал ошибку:
Почему? Потому что я помещаю значок только в папку “drawable”, и я использую устройство для тестирования с высоким разрешением, поэтому он выглядит в папке “drawable-hdpi” для значка. Поведение по умолчанию для всего остального – использовать значки из “drawable”, если они не находятся в “drawable-hdpi” . Но для значка запуска это не кажется действительным.
Итак, решение состоит в том, чтобы поместить копию значка (с тем же именем, конечно) в “drawable-hdpi” (или в зависимости от поддерживаемых разрешений, которые есть у устройств).
Я использовал метод супертипа, который был объявлен “final” в одном из моих действий (в частности, метод isResumed() “). Фактическая ошибка отображается в LogCat только после перезапуска моего устройства разработки.
Ошибка Class Not Found показывает, что ваши файлы классов отсутствуют. Перейдите в Свойствa > Путь сборки Java и добавьте свой пакет, содержащий ваши java файлы, на вкладку Источник, если она отсутствует. Затем создайте свой проект. Это создаст отсутствующие файлы .class.
Недавно я вложил некоторое время в аналогичный отчет об ошибке, который дошел до меня через отчеты об ошибках в хранилище.
Обзор некоторых возможных причин.
Отсутствует библиотека
Так как мое приложение проверено перед выпуском, и проблема возникает только прибл. раз в неделю я почти уверен, что мой вопрос не является библиотекой. Вы должны думать в этом направлении, если сборка вашей системы не удалась и установка приложения с использованием результатов ADB приводит к ошибке при запуске.
Очистка и создание проекта может помочь, если это локальная проблема и убедитесь, что у вас установлена последняя версия SDK и IDE.
В этих случаях используется один класс вашего приложения или библиотека, используемая в вашем приложении, которая вызывает ошибку. Это важное различие со следующей точкой, в которой точка входа (Activity with MAIN intent или ваш пользовательский сервис/объект приложения) не найден.
Если да, рассмотрите следующие вопросы и ответы, которые я выбрал. У всех есть принятый ответ.
Основная активность или приложение не найдено
Неверная настройка AndroidManifest.xml
Больше похоже на ошибку начинающих, приведенную здесь ранее, в одном из ответов, говорящих о файле манифеста Android.
Важно отметить, что эта ошибка всегда блокирует ваше приложение от загрузки. Он должен строиться, но сбой при первом использовании.
Ive отредактировал этот ответ, это важная часть:
Не используйте атрибут android: name! если вы не внедрили пользовательский объект приложения.
Атрибут application: name не имеет ничего общего с именем вашего приложение. Это имя определенного класса для загрузки в качестве приложения пример. Вот почему вы получите ClassNotFoundException, если это класса не будет.
Для имени приложения используйте атрибут android: label на этом же приложение node.
Подавлено: java.io.IOException: невозможно открыть файл DEX
Теперь это становится интересным! Это было частью трассировки стека, записанной в моем случае через игровой магазин. Поэтому я могу создать сборку и выполнить ее на своем устройстве без ошибок (тогда как все предыдущие ошибки предотвратили бы любой прогон).
Похоже, что системе не удалось открыть файл приложения dex java.io.IOException: не удалось открыть файл DEX, это до того, как загрузится какой-либо из ваших классов, поэтому он не имеет никакого отношения к тому, как вы определяете свой класс приложения в манифесте. – user2046264 27 Фев ’14 в 2:25
Важной частью здесь является подавленное исключение IOException. Это означает, что операция ввода-вывода завершилась неудачно. Примерами операций ввода-вывода являются вызовы сети и хранилища.
Еще один отчет об ошибке, который идет в этом направлении, указан в Android, чтобы не удалось создать экземпляр приложения java.lang.ClassNotFoundException:, где роль внешнего хранилища, предоставляемого sdcard упоминается.
Некоторые другие подобные вопросы указывают на то, что это может быть ошибка пользователя. “/mnt/asec/…” указывает, что приложение запускается с SD-карты. Если SD-карта удалена, это может привести к этой ошибке. Сторонние приложения или укорененные устройства, вероятно, могут перенести приложение на SD-карту, даже если оно не разрешено манифестом.
Если вы отчаянно прочитали все ответы на этот вопрос, так как есть и другие пути. Подумайте о полной спецификации пакета, использовании синглтонов и т.д.
Дело в том, что и сеть, и хранилище являются IO.
В моем конкретном случае я проверил все устройства, сообщившие об этой ошибке, и обнаружил, что у них есть внешняя поддержка хранилища. Таким образом, пользователь может установить приложение и перенести его на внешнее хранилище, удалить SD-карту и получить эту ошибку (просто теория, не протестированная).
Я также рассматривал сеть. Наверх страницы подробной информации о трассировке стека в отчетах магазина воспроизведения вы получаете обзор ошибок со временем.
Мне показалось, что ошибка произошла больше в то время, когда было выпущено обновление. Это может поддержать теорию о том, что пользователь получает обновление приложения, загружает это обновление, которое каким-то образом повреждается. Установка идет хорошо, но первое выполнение приложения приводит к ошибке (опять же просто теории, а не проверке).
Другие ресурсы
Наконец, 2 ресурса без SO, которые могут вам помочь:
Используете ли вы свой код в разных средах, допустим, используя Dropbox или что-то в этом роде? Вы используете какую-либо библиотеку или что-то подобное? У меня было много неприятностей после обмена файлами рабочей области, и я исправил его реконфигурирование зависимостей. Надеюсь, это поможет кому-то!
Проверьте, совпадает ли имя пакета в классе с именем пакета в файле манифеста. Это сработало для меня
В моем случае это случается, когда я переносил свою активность запуска в другой пакет без обновления файла манифеста.
У меня было ClassNotFoundException, указывающее на мой класс приложения.
Я обнаружил, что я пропустил Java-конструктор в своем .project
Если что-то отсутствует в вашем buildSpec, закройте Eclipse, убедитесь, что все на месте и снова запустите Eclipse.
У меня такая же проблема в android os версии 4.1.2
добавить строку ниже к AndroidManifest.xml ниже android:label=»@string/app_name» в теге приложения
Это может помочь кому-то с той же проблемой.
Для меня “закрытие” приложения из Eclipse и “повторное открытие” проекта разрешило проблему.
Источник