Flutter собирает APK, но не находит MainActivity: сверяем четыре имени. Практическая проверка: снять имя activity из установленного manifest для проблемного варианта, сопоставить сокращённое или полное имя с namespace, applicationId и package в Kotlin или Java, проверить каталог исходника и flavor source set, затем пересобрать один вариант после.
Сначала зафиксируйте именно этот симптом
Сборка завершается успешно, но установленное приложение не может загрузить заявленный класс MainActivity, поэтому разработчик может переустанавливать SDK и чистить кэши вместо проверки того какой класс реально записан в APK для выбранного flavor. Точный запрос пользователя: почему flutter android успешно собирается и устанавливается но падает с classnotfoundexception для mainactivity и как сверить manifest namespace applicationid package и путь файла. Свежий публичный сигнал описывает границу так: Официальный Stack Exchange API возвращает вопрос Stack Overflow от 26 августа 2026 года: Flutter APK собирается и устанавливается, но запуск падает с ClassNotFoundException для MainActivity. Вопрос не доказывает конкретную причину. Он подтверждает существование сценария «Flutter собирает APK, но не находит MainActivity: сверяем четыре имени», но не назначает виновный компонент и не показывает масштаб. До проверки запишите только наблюдаемое: версию, поверхность продукта, момент события и воспроизводимый шаг. Личные имена, адреса, содержимое аккаунта и закрытые ссылки для этого не нужны. Если симптом нельзя повторить на безопасном примере, остановитесь на сборе фактов и не меняйте конфигурацию наугад.
Проверка по отдельным контрольным шагам
Снять имя activity из установленного manifest для проблемного варианта, сопоставить сокращённое или полное имя с namespace, applicationId и package в Kotlin или Java, проверить каталог исходника и flavor source set, затем пересобрать один вариант после единственного обратимого исправления имени. Разложите эту последовательность на отдельные контрольные действия. Шаг 1: Снять имя activity из установленного manifest для проблемного варианта. Шаг 2: Сопоставить сокращённое или полное имя с namespace. Шаг 3: ApplicationId и package в Kotlin или Java. Шаг 4: Проверить каталог исходника и flavor source set. Шаг 5: Затем пересобрать один вариант после единственного обратимого исправления имени. После каждого шага сохраните ожидаемый и фактический результат, не переходя сразу к следующему. Контрольная переменная для этой статьи — именно «матрица «installed manifest class × namespace × applicationId × package declaration × source path × flavor» отделяет build-time идентификаторы от runtime имени класса и добавляет критерий остановки перед очисткой кэшей или переустановкой toolchain». Изменяйте одно условие, затем возвращайте его в исходное состояние. Если различие исчезло после отката и вернулось при повторе, ветка подтверждена наблюдением; если нет, зафиксируйте отрицательный результат и переходите к следующей границе, не расширяя права и не очищая данные.
Границы, которые задают источники
Документ 1: Официальное руководство Flutter показывает отдельные namespace и applicationId в Android Gradle configuration и прямо указывает обновить package в MainActivity после изменения application ID. Документ 2: Flutter for Android developers показывает AndroidManifest с android:name .MainActivity и исходный MainActivity с package declaration, что подтверждает необходимость сверять относительное имя activity и фактический пакет класса. Эти документы подтверждают только перечисленные свойства и ограничения. Их нельзя растягивать на другую версию, роль, платформу или сетевую схему без отдельной проверки. Форумный или новостной сигнал не заменяет документацию: он задаёт вопрос «почему flutter android успешно собирается и устанавливается но падает с classnotfoundexception для mainactivity и как сверить manifest namespace applicationid package и путь файла», а ответ строится по первичным формулировкам выше. Если интерфейс, версия или результат расходятся с документом, отметьте расхождение как неизвестное и приложите к обращению ссылку и дату проверки, а не предположение о причине.
Развилки решения и стоп-линия
Матрица «installed manifest class × namespace × applicationId × package declaration × source path × flavor» отделяет build-time идентификаторы от runtime имени класса и добавляет критерий остановки перед очисткой кэшей или переустановкой toolchain. Практическая развилка начинается с результата последовательности: снять имя activity из установленного manifest для проблемного варианта, сопоставить сокращённое или полное имя с namespace, applicationId и package в Kotlin или Java, проверить каталог исходника и flavor source set, затем пересобрать один вариант после единственного обратимого исправления имени. Если первый обратимый тест меняет симптом, повторите его на исходном состоянии и сохраните обе строки сравнения. Если результат одинаков, не делайте вывод о поломке всего продукта — переходите к следующему слою, названному в матрице для «Flutter собирает APK, но не находит MainActivity: сверяем четыре имени». Стоп-линия наступает перед удалением профиля, сбросом, выдачей широких разрешений, ослаблением защиты или изменением чужих данных. Минимальный пакет поддержки: обезличенный симптом, версия клиента и ОС, UTC-время, выбранная ветка, одно изменённое условие, ожидаемый и фактический результат. Пароли, токены, IP-адреса, серийные номера и полные логи исключите.
Материал подготовлен редакцией VOne с применением ИИ для структурирования дерева проверки, но каждый технический тезис вручную сопоставлен с указанными официальными, первичными или исследовательскими источниками; форумный либо новостной сигнал использован только как лид и не считается доказательством причины или популярности.
Источники и проверка
- docs.flutter.dev — проверенный источник проверено 2026-08-27
- docs.flutter.dev — проверенный источник проверено 2026-08-27
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.