TGViewer
Channel Public Channel
Android Live 🤖

Android Live 🤖

@android_live

Самые свежие новости, новинки и тренды Android от практикующего разработчика.


Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog

Рекламу не размещаю
Subscribers
5.12K
Photos
54
Videos
3
Links
825

Showing posts older than #1107 · Back to latest

Older Posts 20 shown
Post #1106 3.28K
Как работает Shazam?

Слышали фразу: «Любая достаточно развитая технология неотличима от магии»? Хотел поделиться одним интересным моментом, который у меня как раз и вызывает это чувство. АРечь пойдёт о том, как работает Shazam. И, вероятно, другие похожие сервисы.

Итак, начнём наш пятничный длиннопост.

Любой оцифрованный звуковой файл по сути представляет собой список чисел. При записи микрофон записывает громкость воздуха тысячи раз в секунду. Однако если записать одну и ту же песню на два разных устройства, с точки зрения цифровых данных файлы не будут идентичными.
Это логично: фоновые шумы, разная громкость, а может — и разные комнаты. Всё это влияет на финальный набор чисел.

Так что сравнить два звука вот так «в лоб» не выйдет. И Shazam использует весьма изящное решение.

🟢вместо raw-файла он нарезает аудио на очень короткие кусочки по ~20–50 мс;
🟢далее выполняется Преобразование Фурье (Fourier Transform). Я не силён в математике, и вероятно, мне сейчас накидают в комментах, но... после преобразования у нас получается набор тонов и понимание, какие частоты присутствуют в звуке, и насколько громкие они. Даже при наличии шума ключевые частотные пики остаются узнаваемыми.
🟢благодаря коротким отрезкам Shazam знает не только частоты и громкость, но и то, когда именно они были в песне;
🟢если сложить всю эту информацию вместе — получаем спектограмму песни: слева-направо время, снизу-вверх частота, а точки показывают «яркость» звука;
🟢а потом алгоритм отбрасывает почти всю спектограмму, и оставляет только самые яркие точки. Остаются редкие маркеры в местах, где песня звучала громче всего, — это напоминает карту созвездий.
🟢для каждой «якорной» точки Shazam просматривает близлежащие точки и спрашивает, как далеко они находятся как по времени, так и по частоте. Каждое такое соотношение превращается в уникальный код.

Среднестатистический трек длительностью около трёх минут генерирует тысячи таких меток. Shazam хранит их в базе данных для большинства существующих песен. При этом сервис кодирует не просто отдельные точки, а их пары и расстояние между ними — это позволяет находить совпадения даже в шумной среде.

Ваш телефон выполняет все эти преобразования очень быстро, и за считанные секунды Shazam точно определяет, что за песня сейчас играет.

Это ли не магия? А вы говорите, что алгоритмы не нужны. 🧐
  • 👍 35
  • 🔥 8
  • ❤ 2
Post #1105 3.47K
Compose Preview под капотом

Полезная техническая статья о внутреннем устройстве аннотации Preview.

Было любопытно узнать, что Android Studio использует так называемый ComposeViewAdapter: по сути, xml-прослойка, где парсятся атрибуты +- как при создании кастомной View. А вы говорите, что xml всё, пора выбрасывать. 😄

Дальше происходит ещё немного магии, с ней довольно просто разобраться, прочитав статью.
Dove Letter @Preview in Jetpack Compose: Parameters and Internals How the @Preview annotation renders in Android Studio. showSystemUi, PreviewParameterProvider, LocalInspectionMode, and the Compose pipeline inside.
  • 👍 11
  • 😁 4
  • ❤ 2
Post #1104 4.06K
Borders в Compose

Любопытно. Автор статьи решил заморочиться тем, как реализовать эффект светящихся рамок вокруг элементов в Compose. 🎨

В статье сравниваются различные подходы с точки зрения производительности: от использования обычных PNG-изображений до написания собственных шейдеров.

Не знаю, понадобится ли эти знания на практике, но само исследование выглядит интересно.
Medium How Many Ways Do You Know to Draw a Glowing Border in Jetpack Compose? If I asked you how many ways you know to draw a glowing rounded-rectangle border in Jetpack Compose, what would your answer be? One? Two…
  • ❤ 11
  • 👍 6
  • 🔥 4
Post #1102 4.9K
AGP 9.0 — миграция через Claude Sonnet 4.5

Спасибо за ваши комментарии и обратную связь.

На самом деле в вопросе не было опечаток, хотя он и звучал довольно абстрактно. Попробую рассказать подробнее.

Ещё до выхода Sonnet 4.6 я решил попробовать перевести рабочий проект на последний AGP. Стандартный «мигратор» Android Studio не втащил: добавил какие-то необходимые файлы, но после него даже не вышло собрать проект. А вот Sonnet — смог.

Не скажу, что это сверхсложная задача с точки зрения программирования, но она весьма монотонная для ручного выполнения. Как раз то, что идеально подходит для ИИ.

Для начала я объяснил задачу в режиме планирования (plan-mode). Промт был довольно простым, но я добавил в него несколько официальных гайдов по переходу. После корректировки плана мной — агент начал рабоать… и справился!

Проект успешно собрался, зависимые библиотеки обновились до совместимых версий, а модель самостоятельно «протестировала» результат, проверив сборку всех конфигураций. У меня, кстати, в проекте есть KMP-модули, хотя и довольно простые с бизнес-логикой.

Так что AI сегодня — инструмент, который не стоит игнорировать. Просто пробуйте некоторые задачи доверять ИИ, попутно смотря, что он там делает.
  • 🔥 26
  • 🤔 4
  • 👍 3
  • ❤ 1
Post #1100 3.87K
Project Accessors

На днях узнал о полезной настройке в Gradle, которая пригодится проектам с большим количеством модулей. Даже если она не решит критических проблем, то как минимум сделает код чище и эстетичнее.

Предположим, у нас есть модули core-ui и core-common. Обычно при их добавлении в другой модуль используется такой синтаксис:


implementation(project(":core:common"))
implementation(project(":core:ui"))


В целом, ок, но можно сделать аналогично тому, как мы работаем с зависимостями из toml-каталога:


implementation(projects.core.common)
implementation(projects.core.ui)


Для этого достаточно зайти в корневой settings.gradle и добавить там строку enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS»)

Хотя фича и считается «экспериментальной», вроде работает вполне себе стабильно. Надеюсь, было полезно.
  • 👍 19
  • 🥱 12
  • 👏 6
Post #1099 3.92K
  • 😁 3
  • 🤔 3
  • ❤ 2
  • 👀 2
Post #1098 4.61K
Local History в Android Studio

Мне кажется, что это довольно полезная функция Android Studio, о которой знают далеко не все разработчики.

Если вы случайно дропнули важный код и не успели закоммитить его в Git, данные можно восстановить при помощи Local History.
Для этого кликаем в IDE правой кнопкой и нажимаем на LocalHistory -> Show History. Ну и а затем найдите наиболее подходящую версию.

Важно помнить, что этот инструмент не заменяет Git: локальная история хранится только на вашем компьютере. Кроме того, её легко стереть при очистке кэша. Будьте бдительны!
  • 🔥 16
  • 👍 7
  • 🥴 5
  • 🤡 2
  • ❤ 1
  • 👎 1
Post #1097 4.4K
Обновление зависимостей с Gemini

Может вы, как и я, пропустили, что начиная с Android Studio Otter можно обновлять зависимости в toml-каталогах при помощи Gemini.

Процесс обновления зависимостей хоть и простой шах и мат AGP 9, но довольно затратный по времени. Gemini может решить эту проблему, хотя в идеале такие задачи стоит выносить на CI/CD

Попробовать новую фичу просто:
🔴открываем toml-каталог;
🔴нажимаем на зависимость, требующую обновления;
🔴выбираем пункт «Update all libraries with Gemini».✨
  • ❤ 6
  • 👍 3
  • 👎 2
  • 🔥 2
Post #1096 3.18K
Samsung One UI fix

Если вы пользователь Samsung с последним обновлением One UI, то вас, как и меня, мог раздражать новый двойной свайп для открытия панели быстрых настроек.

Оказывается — можно это вернуть! Один из немногих YouTube Shorts, который сэкономил время. 😄
YouTube Samsung broke this Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
  • 😐 8
  • 🔥 4
  • ❤ 2
  • 👍 1
Post #1095 3.06K
Google Checks

На днях наткнулся на полезный, но не очень популярный сервис от Google — Checks.

Платформа предназначена для автоматической проверки кода на compliance, безопасность и другие подобные штуки.
Если их не мониторить в больших компаниях можно отрести прилично проблем, а данный сервис помогает их предотвратить. Пока всё бесплатно, можно пробовать и решить, надо ли оно вам. Подходит для Android и iOS.

Пробовали? Поделитесь опытом в комментариях. Я вот добавил себе задачку, чтобы не забыть попробовать.
Google Simplify compliance with Google | Checks Discover an easier path to compliance with Google. Checks takes the guesswork out of building safer products by bringing privacy and engineering teams together through automated analysis.
  • 👍 6
  • ❤ 2
  • 🔥 2
Post #1094 11.2K
Styles API в Jetpack Compose 🚀

Интересного завезли. В Compose появился экспериментальный API для работы со стилями, который делает их изменение гораздо удобнее.

Сейчас работа с динамическими стилями требует немало ручного труда. И хотя InteractionSource неплохо приспособлен для этих задач, Styles API упрощает процесс в разы.

Ниже приведён пример кнопки, которая меняет цвет при состояниях hovered и pressed.


@Composable
fun InteractiveButton(onClick: () -> Unit) {
ClickableStyleableBox(
onClick = onClick,
style = {
background(Color.Green)
size(150.dp)
hovered { animate { background(Color.Yellow) } }
pressed { animate { background(Color.Red) } }
}
)
}


Выглядит неплохо, посмотрим, что будет дальше. Детали тут.
Dove Letter Jetpack Compose Style API: Reusable Styles for Composables How the experimental Compose Style API lets you define reusable, typed style objects for composables. Examples, use cases, and tradeoffs inside.
  • 🔥 15
  • 👍 6
  • 👎 1
Post #1093 3.75K
Java Memory Model

Для тех, кто любит копаться в том, что и как работает под капотом. Отличная статья, где описываются механизмы работы JMM.

Тема непростая, однако автор довольно хорошо объясняет сложные вещи простым языком. Ну и на собесе можно выпендриться, если что.
  • 🔥 9
  • 👍 3
  • ❤ 2
Post #1091 4.44K
И снова про шейдеры. Finger Shadows

Ещё один эстетичный эффект, которым хотелось бы поделиться. Маловероятно, что вы сразу внедрите его в свой рабочий проект, но это отличное упражнение для отработки навыков создания красоты с помощью шейдеров

Эффект на видео, а применяется тот же RuntimeShader, что и из предыдущего примера.

Статья тут, исходники тоже.
  • 🔥 9
  • 👍 2
Post #1090 4.07K
Upside Down из Stranger Things 🌌

Первый рабочий день года — отличное время для того, чтобы изучить создание красивой анимации. А возможно, и начать погружение в AGSL-шейдеры — кто знает, куда это может вас привести.

Рассказывается, как сделать эффект Upside-Down из Stranger Things. Если не знаете что это — то достаточно посмотреть анимацию: то переход от обычной тёплой картинки к мрачным, холодным тонам.

В статье по шагам рассказывается про шейдеры, HSV, анимации и их связь с псевдорандомом, и как это всё привязать к Compose.
Medium Stranger Things Upside-Down Compose Modifier using AGSL How to flip into Upside-Down, adding just one Compose Modifier.
  • ❤ 6
Post #1089 3.63K
Mole

Не удивлён, что macOS в топе. Хотя кто знает, может через пару тысяч голосов всё изменится. 😄
Всё равно — пусть будет полезный пост.

На днях узнал о суперполезной утилитке Mole.


Если вкратце — это тулкит, который объединяет возможности CleanMyMac, AppCleaner и других аналогичных сервисов в одной консольной утилите. Бесплатно, opensource и без лишних сложностей.
Заметил особенность: иногда может показаться, что программа «подвисает», но нужно просто подождать пару минут — это нормальное поведение, скрипт скоро продолжит работу.

Давайте поделимся в комментариях результатами: кто сколько места освободил после mo clean. У меня ушло 31.8 ГБ. Честно говоря, думал, что под сотку наберётся, но вот нет.
GitHub GitHub - tw93/Mole: 🐹 Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app. 🐹 Clean, uninstall, analyze, optimize, and monitor your Mac. Free open-source CLI, plus a native Mac app. - tw93/Mole
  • 🔥 11
  • ❤ 5
  • 👍 4
Post #1087 3.88K
RemoteCompose

Похоже, в конце прошлого года появился довольно любопытный подход к рендерингу UI с бэкенда — RemoteCompose. И если раньше мы видели примеры архитектур на базе JSON (вроде Epoxy), то теперь инициатором выступает Google совместно с Compose.

Идея проста: делаете Compose код удалённо, имея все плюсы server-driven UI: тут и простые A/B тесты, и быстрые изменения, и возможность удалённых фиксов, если надо скрыть фичу под флагом.

На клиенте у нас появляется RemoteDocumentPlayer и ряд других компонентов, которые помогают воспроизвести приходящий byte array с сервера и отобразить всё в нативных компонентах.

Подход любопытный и вполне жизнеспособный.
Однако, пока рано говорить про релиз, ведь вышла только первая alpha. Да и iOS-команде продать Compose не так просто, а уж RemoteCompose тем более. Но если проект KMP, то почему бы и не попробовать через несколько месяцев, когда будет хотя бы beta.

Что думаете? 👇
Medium RemoteCompose: Another Paradigm for Server-Driven UI in Jetpack Compose Building dynamic user interfaces has long been a fundamental challenge in Android development. The traditional approach requires…
  • 👍 20
  • 🥴 12
  • 💩 5
  • 🔥 4
  • ❤ 3
  • 👎 2
Post #1086 4K
Lineage OS
#android

На днях обновили версию Android на моём рабочем проекте, и мой старенький Samsung S8+ стал неактуален для тестирования.

Решил посмотреть, что можно с ним сделать и нашёл решение — установить Lineage OS. Оказалось, что это сделать довольно просто, и есть масса сторонних решений на 4PDA. И не только LineageOS.

Выбрал не самую последнюю, но стабильную на базе Android 13.
Работает всё шикарно: быстрее, плавнее и дружелюбнее для батареи, чем стандартная оболочка. Очень доволен. 🫶

К слову, это ещё и неплохой способ попробовать альтернативную прошивку и получить рут-права для тестирования.

Устанавливается всё очень легко, но, похоже, мне повезло. Так гладко установить стороннюю прошивку удаётся не на любой смартфон (судя по отзывам, ведь я в этом деле совсем новичок).

Так что вот вам на заметку кейс, что можно сделать с уже «отжившими» смартфонами. 👆
  • ❤ 11
  • 💯 4
  • 🔥 3
  • 👍 2
  • 🤓 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →