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

EDIT: эта проблема еще не решена в другом предложенном SO-вопросе

У меня было полнофункциональное приложение на рынке уже более года с очень небольшим количеством отчетов о сбоях. Недавно я сменил приложение в библиотеке, чтобы он мог быть включен в несколько разных "оберточных" проектов. Это было так, что я мог легко создавать разные версии - бесплатные, платные, не-google рынки, с покупкой/без покупки приложения и т.д.

Новое приложение "library + wrapper" оказалось работоспособным. Я мог запускать его несколько раз, без ошибок. Но затем через день (когда предположительно ОС закрыла некоторые или все действия приложения), я попытался запустить его, и он сообщил

Unable to instantiate application com.mycompany.mygamelibrary.MyGameApplicationClass: java.lang.ClassNotFoundException: com.mycompany.mygamelibrary.MyGameApplicationClass

Класс, который он не смог найти, - это первый класс, который запускается при запуске программы, MyGameApplicationClass - который расширяет Application. Этот класс является частью библиотеки.

Я подозреваю, что в одном из двух файлов манифеста есть что-то глупое.

манифест проекта обертка содержит строки...

<application android:icon="@drawable/mygame_icon"
    android:screenOrientation="portrait" android:label="My Game Name"
    android:name="com.mycompany.mygamelibrary.MyGameApplicationClass">

Любые идеи, что могло пойти не так?

РЕДАКТИРОВАТЬ: В библиотеке была указана "правильный путь", как определено yorkw ответом на этот вопрос SO.

EDIT: Я не могу повторить крах на данный момент:-( Я не знаю, что это ОС, когда приложение не используется в течение дня или двух.

Ответ 1

Есть две возможности. Либо у вас, как и я, есть орфографическая ошибка в вашем файле манифеста. Попросите сотрудника или друга прочитать его, чтобы убедиться, что имя верное. Или вы неправильно ссылались на проект.

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

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

Обновление: Что касается изменений в OP: как вы подтверждаете, что правильно указали другой проект, вы можете проверить, включен ли проект в APK, чтобы быть уверенным. Вы можете переименовывать и открывать APK как любой другой архив (.rar отлично работает для меня). Иногда это случалось со мной, проект неправильно включен в APK. Очистка рабочего пространства обычно устраняет проблему, и поэтому можно перезапустить вашу среду IDE в зависимости от того, что вы используете. Чтобы вручную провести чистку в Eclipse, используйте Project->Clean... или попробуйте Android Tools->Fix Project Properties ", щелкнув правой кнопкой мыши на вашем проекте.

Как вы, похоже, устранили проблему, перезагрузив свое устройство, возможно, что библиотеки были связаны неправильно. Проблема, которую я никогда не видел сам, но как очень распространенная цитата, гласит: "Вы пытались выключить и снова включить?".

Ответ 2

Для Android Studio:

Build Clean Project

Исправлена ​​проблема.

Ответ 3

Вы пытались создать новый подкласс MyGameApplicationClass в своем "основном" проекте и установить его в манифесте как класс приложения?

Ответ 4

У меня было множество ошибок с Android Studio 3.0 Canary 4, и я исправил их, отредактировав файл AndroidManifest.xml, добавив в javasberish имя приложения. Затем я щелкнул сборку. Очевидно, появился целый беспорядок новых сообщений об ошибках. Я изменил имя на то, что должно быть, построил приложение, и он просто запустился.

Иногда я просто не знаю...

EDIT: Просто столкнулся с этой проблемой на Android Studio 3.0 Canary 4 на моем ноутбуке при переключении. Я снова прошел один и тот же процесс изменения файла AndroidManifest.xml, чтобы сохранить опечатку, создание и изменение. Это не сработало.

Затем я заметил, что мгновенный запуск все еще включен. Входя в настройки (нажав команду +, (запятая)) и набрав "мгновенный запуск", мне удалось отключить мгновенный запуск, создать приложение, и ошибка класса, который не найден, ушел.

Краткое описание шагов для исправления [FOR ME]

  • Недействительный кэш/перезапуск
  • Очистить проект
  • Вручную удалите папку сборки (необходимо иметь в представлении проекта для этого)
  • Сделайте намеренно ошибочное редактирование в вашем файле AndroidManifest.xml, создайте приложение, наблюдайте за ошибками, удалите ошибочное редактирование и снова создайте
  • Отключить мгновенный запуск

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

Ответ 5

Может быть, это проблема с конфигурацией пути сборки. Для решения проблемы я сделал следующее.

1.Нажмите на свой проект и перейдите на Java Build Path.

2.Нажмите на вкладку "Заказ и экспорт".

3. Проверьте, если вы добавили частные библиотеки библиотек Android и другие библиотеки 3-й части.

4. Нажмите ok и очистите проект. Я надеюсь, что это решит проблему.

Ответ 6

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

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

Я мог бы решить проблему с помощью

  • правильный порядок построения пути (как я вижу, вы уже это сделали)
  • Я проверяю вкладку Order and Export на android-suppor-v4.jar
  • и ключом был Android SDK Managert- > Обновить все и (далее) Eclipse- > Help- > Проверить наличие обновлений.

После того как я обновился до последнего плагина Android и SDK, мое приложение скомпилировалось и снова запустилось.

Я надеюсь, что это поможет вам!

Ответ 7

Я не очень уверен в этом, но может случиться так, что срок действия вашей системы debug.keystore истек, поскольку он действителен всего 365 дней. Вам просто нужно удалить debug.keystore с вашего компьютера. Файл debug.keystore будет автоматически создан Eclipse при компиляции вашего приложения для Android.

Ответ 8

Такое же сообщение было видно... на этот раз оказалось, что это разные папки вывода для MyApp/gen и MyApp/src в пути сборки (вызванные интеграцией Maven).

Устранение ошибки "Разрешить выходные папки для исходных папок" решило проблему.

Ответ 9

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

AndroidManifest.xml

введите описание изображения здесь

приложение /build.gradle

введите описание изображения здесь

В этом случае вы можете видеть, что applicationId и пакет оба являются такими же, как com.mycompany.mygamelibrary

Ответ 10

Этот весь процесс работает для меня, чтобы решить класс приложения Exception.

Шаг 1: Открыть Run (окно + R) Поиск → Предварительная выборка Удалить все файлы (Некоторые файлы не удаляются)

Шаг 2: Открыть Run (окно + R) Поиск → % temp% Удалить все файлы (Some File not Delete)

Шаг 3: Откройте Android Studio → Build → Clean Project

ИЛИ

Выберите File > Invalidate Caches/Restart > Invalidate и Restart из панели инструментов Android Studio.

ИЛИ

Закройте и снова запустите проект Android.

ИЛИ

Перезапустить систему

Ответ 11

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

Ответ 12

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

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