Создание собственного лаунчера для Android начинается не с дизайна иконок, а с правильной записи в манифесте приложения: именно категория android.intent.category.HOME сообщает системе, что программа претендует на роль домашнего экрана. Без этого объявления ваше приложение останется обычной утилитой, которую система никогда не предложит при нажатии кнопки «Домой». В этой статье разберём полный путь — от выбора инструментов до установки готового лаунчера на устройство.
Писать будем на Kotlin в среде Android Studio — это официальный стек разработки под Android, рекомендованный Google. Предполагается, что у вас есть базовые навыки программирования: если вы знакомы с синтаксисом Java или Kotlin, материал будет понятен без дополнительной подготовки. Если опыта нет, начните с раздела про альтернативные подходы без кода.
Что такое лаунчер и как он работает в системе
Лаунчер — это обычное Android-приложение, которое система рассматривает как кандидата на роль домашнего экрана. Когда пользователь нажимает кнопку «Домой», система ищет все установленные приложения, объявившие поддержку категории HOME, и предлагает выбрать одно из них. Никаких системных привилегий или root-прав для этого не требуется — механизм заложен в Android изначально.
Типичный лаунчер решает три задачи: отображает список установленных приложений, позволяет запускать их и показывает виджеты или ярлыки на рабочем столе. Минимально жизнеспособный лаунчер — это одна активность со списком приложений, полученным через PackageManager. Всё остальное — сетка иконок, жесты, папки, виджеты — надстройки, которые можно добавлять постепенно.
Инструменты для разработки
Основной инструмент — Android Studio, официальная среда разработки от Google. Она включает редактор кода, эмулятор, отладчик и систему сборки Gradle. Установите актуальную стабильную версию с официального сайта разработчиков Android, при первом запуске среда сама загрузит необходимые компоненты SDK.
Для тестирования понадобится либо эмулятор, либо реальное устройство с включённой отладкой по USB. Эмулятор подходит для проверки логики, но поведение лаунчера — жесты, скорость прокрутки, взаимодействие с системными панелями — комфортнее оценивать на физическом смартфоне.
- 💻 Android Studio — среда разработки с эмулятором и отладчиком
- 📱 Реальное Android-устройство для финального тестирования
- 🛠️ Знание основ Kotlin и структуры Android-проекта
- 🎨 Графический редактор для иконки приложения (подойдёт любой)
Настройка манифеста: ключевой шаг
Главное, что отличает лаунчер от обычного приложения, — содержимое файла AndroidManifest.xml. В объявление главной активности нужно добавить два фильтра интентов: один стандартный (чтобы приложение появилось в списке программ), второй — с действием MAIN и категорией HOME. Именно второй фильтр регистрирует приложение как домашний экран.
<activity android:name=".MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Категория DEFAULT обязательна: без неё система не сопоставит интент кнопки «Домой» с вашей активностью. После установки такого приложения на устройство система при следующем нажатии «Домой» покажет диалог выбора лаунчера — это и есть признак того, что манифест настроен верно.
⚠️ Внимание: если после установки приложения система не предлагает выбрать его домашним экраном, проверьте именно блок с
HOMEиDEFAULTв манифесте. Опечатка в имени категории — самая частая причина, по которой лаунчер «не виден» системе.
Пишем минимальный лаунчер на Kotlin
Минимальная логика лаунчера умещается в несколько десятков строк. Нужно получить список установленных приложений через PackageManager и отобразить его в прокручиваемом списке. Начиная с Android 11 (API 30) для получения полного списка пакетов требуется объявить в манифесте разрешение QUERY_ALL_PACKAGES либо явно указать нужные пакеты через тег <queries> — учтите, что Google Play проверяет обоснованность использования этого разрешения при публикации.
val pm = packageManager
val intent = Intent(Intent.ACTION_MAIN, null)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
val apps = pm.queryIntentActivities(intent, 0)
// Отображаем apps в RecyclerView, при нажатии запускаем activity
При нажатии на элемент списка сформируйте интент запуска через pm.getLaunchIntentForPackage(packageName) и передайте его в startActivity(). Этого достаточно, чтобы ваш домашний экран выполнял свою базовую функцию. Дальше можно добавлять сетку иконок вместо списка, поиск, жесты и виджеты — архитектура ничем не ограничивает фантазию.
☑️ Проверка минимального лаунчера
Оформление и пользовательский опыт
Домашний экран — самый часто используемый экран смартфона, поэтому требования к плавности и отзывчивости здесь выше, чем у обычных приложений. Используйте RecyclerView или компоненты Jetpack Compose для списков, загружайте иконки асинхронно и кэшируйте их — повторное обращение к PackageManager при каждой прокрутке заметно тормозит интерфейс.
Продумайте базовые сценарии: долгое нажатие на иконку (обычно открывает контекстное меню), свайп вверх для открытия списка всех приложений, поиск по названию. Не копируйте слепо чужие лаунчеры — минималистичный, но быстрый домашний экран ценится пользователями не меньше, чем перегруженный функциями.
Тестирование и установка на устройство
Чтобы назначить созданный лаунчер домашним экраном, установите APK на устройство и нажмите кнопку «Домой» — система предложит выбрать приложение. Также выбор доступен в настройках: путь обычно проходит через раздел приложений по умолчанию, но точное расположение пункта зависит от версии Android и оболочки производителя, поэтому сверяйтесь с документацией своего устройства.
Обязательно проверьте поведение при крайних сценариях: поворот экрана, нехватка памяти, удаление приложения, иконка которого стоит на рабочем столе, перезагрузка устройства. Лаунчер запускается раньше большинства процессов, и ошибка в нём может сделать смартфон неудобным в использовании до смены домашнего экрана.
⚠️ Внимание: перед экспериментами убедитесь, что знаете, как вернуть штатный лаунчер через настройки устройства. Если ваше приложение падает сразу после запуска, а оно назначено домашним экраном, пользоваться смартфоном будет затруднительно. Держите под рукой второй лаунчер или способ добраться до настроек.
| Подход | Кому подходит | Ограничения |
|---|---|---|
| Kotlin + Android Studio | Тем, кто хочет полный контроль | Требует навыков программирования |
| Изучение открытых лаунчеров (форк) | Разработчикам со средним опытом | Нужно разбираться в чужом коде и лицензии |
| Конструкторы приложений | Новичкам без опыта | Минимальная гибкость, часто не поддерживают функцию HOME |
| Заказ у разработчика | Тем, кому нужен готовый продукт | Финансовые затраты, зависимость от исполнителя |
Про публикацию в Google Play
Для публикации лаунчера в Google Play потребуется аккаунт разработчика (регистрация платная). Приложение с разрешением QUERY_ALL_PACKAGES проходит дополнительную проверку: Google требует обосновать, зачем оно нужно. Для лаунчера это обоснование очевидно — отображение списка приложений, но форму всё равно придётся заполнить. Также подготовьте скриншоты, иконку и описание согласно требованиям магазина.
Альтернативы: если писать код не хочется
Полноценный лаунчер без программирования создать практически невозможно — механизм домашнего экрана требует корректного манифеста и кода. Однако есть компромиссные варианты. Существуют проекты лаунчеров с открытым исходным кодом: их можно склонировать, изменить оформление и собрать под своим именем, соблюдая условия лицензии конкретного проекта.
Другой путь — кастомизация существующего лаунчера. Многие популярные домашние экраны поддерживают темы, пакеты иконок и гибкие настройки сетки. Если ваша цель — уникальный внешний вид рабочего стола, а не собственный программный продукт, этот вариант закроет задачу без единой строки кода.
Частые ошибки начинающих
Первая типичная ошибка — забытая категория DEFAULT в интент-фильтре, из-за чего система не предлагает приложение в качестве домашнего экрана. Вторая — синхронная загрузка иконок в главном потоке: интерфейс подвисает при первой прокрутке списка. Третья — отсутствие обработки удаления приложений: если пользователь удалил программу, чья иконка закэширована, лаунчер должен корректно обновить список, подписавшись на системные события пакетов.
- 🚫 Жёсткое кодирование размеров сетки без учёта разных экранов
- 🚫 Запрос списка приложений при каждом показе экрана вместо кэширования
- 🚫 Отсутствие обработки поворота экрана и смены конфигурации
- 🚫 Игнорирование тёмной темы системы
Часто задаваемые вопросы
Нужны ли root-права для создания лаунчера?
Нет. Лаунчер — обычное приложение, которое объявляет поддержку категории HOME в манифесте. Root-права могут понадобиться только для отдельных продвинутых функций, но не для базового домашнего экрана.
Можно ли создать лаунчер без знания программирования?
Полноценный собственный лаунчер без кода сделать нельзя. Компромиссные варианты — доработка проекта с открытым исходным кодом или глубокая кастомизация существующего лаунчера через темы и настройки.
Почему система не предлагает моё приложение как домашний экран?
Проверьте манифест: интент-фильтр должен содержать действие MAIN и категории HOME и DEFAULT. Также убедитесь, что активность имеет атрибут android:exported="true" — он обязателен для компонентов с интент-фильтрами на современных версиях Android.
Как вернуть стандартный лаунчер после тестирования?
Откройте настройки устройства, найдите раздел выбора приложений по умолчанию (точный путь зависит от модели и версии Android) и переключите домашний экран обратно на штатный. Альтернативный способ — удалить ваш лаунчер, тогда система автоматически вернёт прежний.
Можно ли опубликовать свой лаунчер в Google Play?
Да, лаунчеры разрешены правилами магазина. Потребуется платный аккаунт разработчика и, при использовании разрешения QUERY_ALL_PACKAGES, заполнение формы с обоснованием его необходимости.