Skip to content

About

Dynamic Island для Android — остров как на iPhone: музыка, звонки, таймеры, оплата. RU/EN

Resources

Stars

183 stars

Watchers

9 watching

Forks

Repository files navigation

Русский  English

🏝️ Динамический остров для Android

Dynamic Island в стиле iPhone над камерой любого Android-смартфона

Уведомления с ответом · навигатор · оплата · музыка с текстом песен · звонки · таймеры · загрузки · зарядка · фонарик · системные события

Версия 1.7.0 Загрузки Сборка
Android 8+ Kotlin Jetpack Compose Без рекламы

Dynamic Island 1.7.0: иллюстрации быстрого доступа, часов, погоды и цвета текста

Что нового · Возможности · Установка · Жесты · Настройки · Как устроено


✨ Что нового в 1.7.0

  • 🫧 Liquid Glass: обновлённые блики и прозрачность, настройка плотности и силы системного размытия. Эффект распространяется на остров, раскрытые карточки и вторую активность на поддерживаемых устройствах.
  • 📌 Приложения и контакты: компактный ряд быстрого доступа под датой.
  • 🕒 Сводка: часы, шаги и погода на отдельных компактных страницах; варианты часов и дополнительные элементы управления.
  • 🌤 Погода: выбор города, отдельная карточка или страница сводки, ручное обновление и повтор после ошибки.
  • 🎵 Текст песен: мягкая непрерывная волна подсветки и плавная смена строк; обычный текст остаётся прокручиваемым.
  • 🎨 Свои цвета и шрифты: цвет текста, HEX/HSV-палитра, системный или собственный шрифт, толщина и размеры элементов.
  • 📶 Точка доступа: постоянное состояние, переход к настройкам и количество клиентов, когда система предоставляет достоверные сведения.
  • ⬇️ Скорость загрузки в раскрытой карточке: данные приложения или необязательная приблизительная общая скорость сети ↓/↑; проценты загрузки сохраняются.
  • 🔓 Face ID · только лицо: необязательная анимация подтверждённого распознавания лица через отдельно настроенный Shizuku. PIN и отпечаток не выдаются за Face ID.
  • ⏰ Создание будильника, автоскрытие пустого острова, прокрутка наверх в поддерживающих приложениях и сохранение раскрытой карточки при касании снаружи.
  • 🔋 Батарея: значок с заполнением по текущему заряду и необязательная приблизительная оценка времени зарядки.
  • 🔔 Уведомления: история, варианты показа, длительность, тихие сообщения, правила для приложений и диагностика пропусков.
  • 🌍 Языки: индонезийский, португальский, казахский, французский и испанский; улучшено переключение языка.
  • 💜 Поддержка автора: Telegram и Boosty в разделе «О приложении», с русскими и английскими подписями.

Important

При обновлении с 1.6.1–1.6.5 удалять приложение не требуется: подпись совместима. Android может запросить повторное разрешение ограниченных настроек и включение специальных возможностей. Финальный сценарий на физическом устройстве ещё требует проверки.

На промоиллюстрации показаны примерные значения. Источник погоды: Open-Meteo (CC BY 4.0).

Все изменения — в CHANGELOG.md.

📱 Возможности

Остров: «Оплата · К терминалу», «Оплачено» с суммой, будильник и циферблат сна, «Отправлено», карточка новой версии, загрузка с процентами и «Обновлено»
КарточкаВ капсулеПо нажатию
🎵 МузыкаОбложка слева от камеры, звуковая волна в цвет обложки справаОбложка, название, синхронный текст песни, перемотка, ⏪ ⏸ ⏩, вывод звука
📞 ЗвонкиВходящий — аватар, имя и кнопки сразу; разговор — трубка со временем и волнаИмя, длительность, «Завершить»
⏳ ТаймерПесочные часы и обратный отсчёт, последние 10 секунд краснымКольцо остатка вокруг паузы, отмена; в конце — звонок и вибрация
⏱️ СекундомерВремяПауза, сброс, стоп
⏰ ЧасыТаймер или секундомер «Часов» — из уведомления или, если уведомления выключены, с экрана приложения; запись экрана — краснымКрупное время, пауза, открыть приложение
🌙 БудильникЗа 12 часов до звонка: луна и время подъёма; когда ставите будильник — плашка «Подъём 7:30 · сон 8 ч 15 мин»Циферблат сна, как на iPhone: дуга от «сейчас» до будильника, время звонка и сколько осталось спать
⬇️ ЗагрузкиЗначок приложения и кольцо прогресса (Google Play, Telegram…)Название, полоса и проценты
🔦 ФонарикЖёлтый значокКарточка с лучом как в iOS 18: свайп — яркость (Android 13+), нажатие — выключить
🔔 УведомленияБольшая плашка: аватар со значком приложения, имя, текст и кнопки «Ответить» / «Пометить прочитанным»Ответ прямо в острове; нажатие открывает приложение, свайп вверх убирает
🧭 Навигация, такси, доставкаСтрелка поворота и расстояние, у такси и доставки — время подачиКуда поворачивать, время прибытия, сколько ехать, «Открыть»
⚡ ЗарядкаМолния, проценты и батарейкаПолоса заряда
🕐 Пустой островМаленькая капсула над камеройЧасы, дата, заряд, таймер на 1–99 мин, секундомер, фонарик

Если активностей две — например, музыка и таймер, — вторая уходит в круглый пузырь рядом с островом. Нажатие на пузырь раскрывает её.

🔔 События

Короткие уведомления в капсуле, каждое включается отдельно:

⚡ Зарядка началась / остановлена 🪫 Низкий заряд (5%) 📶 Wi-Fi подключён / отключён
🎧 Наушники подключены / отключены (с зарядом) ✈️ Режим полёта 🔕 Звук / вибрация / без звука
🔆 Адаптивная яркость 🔌 USB-устройство 🔓 Разблокировка
🌙 Не беспокоить 💳 Приложите к терминалу ✅ Оплачено

📥 Установка

  1. Скачайте DynamicIsland.apk со страницы последнего релиза и установите.
  2. Откройте приложение — на «Главной» нажмите «Открыть спец. возможности» и включите «Динамический остров».

    На Android 13+ появится «Ограниченная настройка»: закройте окно, откройте О приложении → ⋮ → Разрешить ограниченные настройки и повторите шаг 2. Пункт в меню «⋮» появляется только после первой попытки.

  3. «Главная» → Разрешения: включите Доступ к уведомлениям — без него не будет музыки, загрузок и таймеров Часов.
  4. Там же нажмите Звонки и разрешите доступ к телефону, журналу звонков и контактам — тогда остров покажет входящий с любой звонилкой.
  5. На Android 12+ разрешите Bluetooth, чтобы видеть имена наушников.
  6. Оформление → Положение и размер — остров станет красным: сдвиньте его, пока красное не окажется ровно над камерой, и подберите ширину и высоту. Камера-капля — включите «Как вырез».

Tip

Если остров пропадает (Xiaomi и HyperOS, Oppo, realme, Samsung, Infinix…): Разрешения → Чтобы остров не закрывался — батарея без ограничений, автозапуск и закрепление в недавних.

Если не устанавливается

Что пишет телефон Что сделать
«Приложение заблокировано для защиты устройства» / «Потенциально вредоносное приложение» (Play Защита) Так Google встречает любое приложение не из Play Маркета, которое просит спец. возможности. Код открыт — его можно проверить. Play Маркет → значок профиля → Play Защита → ⚙️ → временно выключите «Сканировать приложения», установите остров и включите обратно
«Ошибка при синтаксическом анализе пакета» / «There was a problem parsing the package» Файл скачан не до конца или открыт не тем приложением. Скачайте DynamicIsland.apk со страницы релиза в Chrome и откройте его из загрузок Chrome или через «Файлы» Google, а не из TikTok, Telegram или загрузчиков видео
«Приложение не установлено» поверх старой версии С 1.6.0 и старше — один раз удалите старую версию: у 1.6.1+ новый ключ подписи
«Ограниченная настройка» / «Доступ запрещён» при включении службы См. шаг 2: О приложении → ⋮ → Разрешить ограниченные настройки
Установилось, но острова нет (Xiaomi, MIUI, HyperOS) Включите службу в «Спец. возможностях» (шаг 2). Затем О приложении → Автозапуск — вкл.; Контроль активности («Экономия заряда») → Нет ограничений; Другие разрешения → «Отображать всплывающие окна, когда запущено в фоне» — разрешить. И закрепите остров в недавних: потяните его карточку вниз

Новые версии ставятся поверх старых, настройки сохраняются (с 1.6.0 и старше — один раз переустановить, см. выше).

Tip

Обновлять можно прямо в острове, а можно через Obtainium: добавьте ссылку https://github.com/Akira9021/Dynamic-Island- — APK в релизах всегда называется DynamicIsland.apk.

👆 Жесты

Действие Результат
Нажатие Раскрыть (можно сменить: открыть приложение, пауза, следующий трек, ничего)
Двойное / долгое нажатие Настраивается, долгое по умолчанию открывает приложение
Потянуть вниз Раскрыть — капсула тянется за пальцем
Потянуть вверх, нажатие или касание мимо Свернуть
Толкнуть влево / вправо Следующий / предыдущий трек
Нажатие на звонящий таймер Выключить звонок

⚙️ Настройки

Четыре вкладки:

  • Главная — живой пример, включён ли остров, разрешения и «Проверка»: все примеры острова на одном экране.
  • Функции — что показывает остров и как с ним обращаться:
    • Динамические карточки, уведомления и события — каждую можно выключить; у уведомлений — кнопки ответа, число строк и цвет кнопок: сиреневый, системный, из аватара или свой.
    • Текст песен — в раскрытом плеере.
    • Жесты и поведение — когда показывать и сворачивать остров, кружок второй активности, виброотклик, включение экрана при звонке.
    • Системные плашки — быстрый переход к настройкам Android, где выключаются всплывающие плашки звонилки, «Часов» и батареи, чтобы эти события показывал только остров.
    • Язык — русский или английский, сразу для приложения и острова («Общие → Язык»).
  • Оформление — как выглядит остров:
    • Положение и размер — сдвиг по горизонтали, отступ сверху, ширина, высота и «Как вырез»; капсула меняется на экране сразу.
    • Размер с активностью — насколько капсула с активностью толще и шире спокойной, с живым примером.
    • Цвет капсулы — цвет, контур (цвет, толщина, цвет из обложки) и тень.
    • Liquid Glass (экспериментальный) — стеклянный остров и карточки, плотность стекла.
    • Раскрытие острова — стиль («Как Фрукт» с эффектом желе, «Пружина», «Плавно», «Без анимации»), длительность, упругость, «Уменьшить эффекты».
    • Эффекты — размытие, живой эквалайзер, вздрагивание, волны оплаты, свечение обложки и экономия заряда.
  • О приложении — версия и обновления (автопроверка раз в 3 часа, «Проверить сейчас», «Что нового»), инструкция, диагностика навигации и «Страница GitHub» — ссылка сюда.

🧩 Как устроено

Для разработчиков

Kotlin, Jetpack Compose, Material 3. Нужны JDK 17 и Android SDK 35.

./gradlew assembleDebug     # app/build/outputs/apk/debug/app-debug.apk — для своего телефона
./gradlew assembleRelease   # app-release-unsigned.apk — релизную подпись ставит CI

Каждый push собирает APK в GitHub Actions. Чтобы выпустить новую версию, повысьте versionName и versionCode в app/build.gradle.kts и значок версии в начале обоих README и добавьте раздел ## [x.y.z] в CHANGELOG.md и CHANGELOG.en.md — после push в основную ветку релиз с APK и описанием на двух языках создастся сам. Тег v* тоже работает.

Файл За что отвечает
service/IslandService.kt Служба спец. возможностей и два окна: рисования (на всю ширину, сквозь него проходят касания) и касаний (невидимое, точно над островом)
service/NotifListener.kt Доступ к уведомлениям: звонки, загрузки, таймеры из уведомлений
service/MediaMonitor.kt Медиасессии любого плеера, обложка и её цвет, текст песен
service/SystemEvents.kt Зарядка, Wi-Fi, наушники, режим полёта, звук, яркость, USB, разблокировка
lyrics/LyricsRepo.kt Текст песен: LRCLIB, затем NetEase
service/CallMonitor.kt Звонки по состоянию телефона, имя и фото из контактов
island/IslandOverlay.kt Выбор главной активности и пузыря, форма, пружины, жесты
island/Compact.kt, Expanded.kt Свёрнутые и раскрытые виды карточек
ui/ Приложение настроек

Почему два окна: если менять размер окна во время анимации, Android на кадр показывает старую картинку в новом месте — и остров дёргается. Поэтому окно рисования не меняет ширину никогда, а невидимое окно касаний двигается за островом и передаёт касания.

Ключ подписи в репозитории не хранится: Gradle собирает APK без подписи, а подписывает его CI ключом из секретов GitHub (KEYSTORE_BASE64, KEYSTORE_PASSWORD) и сверяет отпечаток сертификата. Локальная отладочная сборка подписывается обычным отладочным ключом.

💜 Благодарности

Идея и поведение — из Dynamic Island для Windows (mihailkotovski): пружинные анимации, плеер по клику, толчок вбок для смены трека, таймер с кольцом, текст песен с LRCLIB. Тексты песен — LRCLIB.

Шрифт Inter — SIL OFL 1.1 · Иконки Ionicons — MIT · Сделано с Claude Code

About

Dynamic Island для Android — остров как на iPhone: музыка, звонки, таймеры, оплата. RU/EN

Resources

Stars

183 stars

Watchers

9 watching

Forks

Releases

Packages

Contributors

Languages