Что это
Основной язык приложений для Android. Нативное приложение на Kotlin работает быстрее и надёжнее «обёрток» над сайтом и имеет доступ ко всему оборудованию телефона.
Как используем
На Kotlin написаны аудиоплеер OshaPlay с выводом на USB-ЦАП и VPN-клиент OshaVPN. Сборки подписаны и обновляются по воздуху.
Где нативное приложение нужно бизнесу
- Нужен доступ к оборудованию телефона: USB-устройству, системному VPN, фоновой работе, которой нет у сайта.
- Приложение должно работать в фоне часами: играть музыку, держать туннель, отправлять отчёты.
- Пользователю нужна одна кнопка, а всё сложное приложение делает само.
- Приложение раздаётся своим людям ссылкой, без магазина, и обновляется само.
Как мы это используем
- OshaPlay — аудиоплеер для Android 12 и новее. Сам забирает USB-ЦАП через USB Host API и отдаёт трек бит в бит в обход системного микшера, который иначе пересчитывает любой звук к 48 кГц. Интерфейс на Jetpack Compose, воспроизведение на Media3, поток на ЦАП и ресемплер на C++. Проверка подделок Hi-Res строит спектр прямо в Kotlin.
- OshaVPN — VPN-клиент для Android 10 и новее с одной кнопкой «Подключить». Оба VPN-ядра собраны в одну библиотеку, вход выбирается гонкой, российские сайты идут напрямую. Экран «Почти готово» собирает нужные разрешения, а главный экран напоминает включить системную «постоянную VPN».
Оба приложения ставятся из APK и обновляются по воздуху. Разработка — в разделе Приложения для Android и Windows.
Типичные проблемы
- Оболочка производителя усыпляет приложение. На Huawei звук заикался при выключенном экране: оболочка EMUI замораживала плеер на секунды. Нашли по отчётам с телефона, вернули очередь аудио к 0,4 с и добавили в настройки кнопки «Запуск приложений EMUI» и «Экономия батареи» с объяснением.
- Эмулятор — не телефон. Прямой вывод на ЦАП в эмуляторе проверен только для случая «ЦАПа нет», реальная работа видна по отчётам с телефона заказчика. Поэтому тестовые сборки и журналы собираем с реальных устройств.
- Версия Android ограничивает возможности. Встроенный вывод бит в бит на USB появился только в Android 14, на Android 12 его пришлось писать самим.
- Разрешения. Без нужных разрешений фоновая работа и VPN молча не работают, поэтому приложение само ведёт пользователя по ним.
Когда это не нужно
Если задача — показать каталог, принять заявку или дать кабинет, хватит сайта или Telegram Mini App: их не нужно устанавливать и обновлять. Нативное приложение оправдано там, где нужны оборудование, фоновая работа или системные функции телефона.