Не удалось создать экземпляр приложения - 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 снова разрешило проблему.