оригинальная версия версия для слабовидящих контрастная версия выключить изображения включить изображения тёмная версия светлая версия RSS FEED K2 NEWS
☰☰
Вторник, 16 Июль 2019 00:01

Default activity not found что делать

С такой бедой столкнулся, когда захотел запустить написанное приложение на виртуальном устройстве. Ошибка появляется из-за того, что у Вас не указана «рабочая область по умолчанию». Исправляется ошибка следующим образом, сначала открываем панель конфигурации.

Android Studio уроки

Здесь ищем опции загрузчика (Launch Options), и вместо Default Activity:

Android Studio уроки

Выбираем Specifed Activity, а также выбираем интересующий нас вариант.

Android Studio уроки

Таким образом мы избавились от одной ошибки, но столкнёмся с другой (the activity is not declared in androidmanifest.xml), открываем AndroidManifest.xml и перед закрывающим тегом </activity> (только именно той рабочей области, которая нас интересует, если у Вашего проекта их несколько, не перепутайте) добавляем следующий код:

<intent-filter>
     <action android:name="android.intent.action.MAIN"/>
     <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

Должно получиться примерно следующее:

Android Studio уроки

После чего проект запустился без ошибок.

Уже после этого случая я задался вопросом — а почему вообще Android Studio так своенравно относится к «дефолтной активности», ведь по идее это базовая настройка, которая должна работать из коробки. Разобрался: проблема чаще всего вылезает после того, как проект был перенесён из другой IDE, скопирован из шаблона на GitHub, либо когда вручную переименовывали главный класс активности, а конфигурацию запуска студия при этом не обновила автоматически. То есть по факту это не баг среды, а рассинхронизация между файлом конфигурации запуска (run configuration) и реальной структурой проекта.

Отдельно хочу предостеречь от одной ошибки, в которую я сам чуть не влетел на радостях, что нашёл решение. Если в проекте несколько модулей (например, отдельно app и library), убедитесь, что вы редактируете Launch Options именно для нужного модуля, а не для первого попавшегося в списке — иначе получите ту же самую ошибку, только теперь уже необъяснимую на первый взгляд, ведь intent-filter вы вроде бы уже прописали, просто не в том AndroidManifest.xml.

Ещё один нюанс, который стоит держать в голове: если у вас несколько активностей претендуют на роль «точки входа» (то есть у нескольких прописан android.intent.category.LAUNCHER), система при сборке иногда путается и всё равно ругается на default activity, даже если вы явно указали Specified Activity. В таком случае стоит проверить весь манифест на предмет дублирующихся intent-filter с этой категорией и оставить её только у одной, действительно главной, активности приложения.

Если же после всех этих манипуляций ошибка всё равно продолжает вылезать — почти наверняка дело в кэше самой студии. Помогает банальный Invalidate Caches / Restart из меню File, после чего Android Studio заново переиндексирует проект и подтягивает актуальную конфигурацию манифеста. Звучит как «выключите и включите», но в 90% случаев на моей практике именно это и спасало, когда все настройки выглядели правильными, а ошибка продолжала маячить как ни в чём не бывало.

Спонсоры: