Android Broadcast
14.4K subscribers
3.63K photos
362 videos
11 files
6.04K links
Подборка новостей и статей для Android разработчиков.

Реклама и связь с автором @ab_manager

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
#Gradle

Gradle Dependency: api vs implementation

Визуализация отличий между подключением зависимостей в Gradle через implementation и api
#KotlinVocabulary #Kotlin #AndroidDev

Collections and sequences - Kotlin Vocabulary (5:17)

Google решила что вместо создания нового контента, лучше снять видео на свою старую статью
Android Broadcast
🔴 Стартует собеседование на Mobile Developer. Алексей Панов, Контур Алексей Панов проведет собеседование на позицию «Mobile Developer» P.S. Запись останется на канале после эфира #AndroidBroadcast #собеседование
Благодаря одной из подписчиц (Динара, спасибо!) появились таймкоды под вчерашним собесом от Леши Панова

00:21 Вступление
01:37 Знакомство с экспертом
05:28 Знакомство с кандидатом
06:53 О формате собеседования
07:30 Часть 1. KMP. Проектирование
51:50 Фидбэк по первой части
54:50 Часть 2. Корутины
01:25:48 Фидбэк по второй части
01:26:41 Часть 3. Jetpack Compose
01:35:36 Фидбэк по третьей части
01:39:24 Впечатления кандидата
01:40:17 Общий фидбэк
01:44:03 Разбор вопросов из чата
01:50:00 Заключение
👍58👎4
Media is too big
VIEW IN TELEGRAM
📺 Lifecycle path to Multiplatform (20 мин)

Недавно библиотеки Jetpack Lifecycle обзавелись поддержкой KMP. Из видео вы больше узнаете о том
👉 как проходил этот процесс, каковы реальные проблемы
👉 связанные с поддержанием обратной совместимости API
👉 какие уроки извлекли из работы с ограничениями KMP команда
👉 что поможет вам перенести ваши собственные библиотеки на KMP

Это перезалив видео с официального канала Android Developers, чтобы ограничения YouTube не сказались на расширении знаний. Ставьте 🤖 если стоит делать так и дальше с перезаливом видео от Google

#androiddev #google #kmp #jetpack #видео
Please open Telegram to view this post
VIEW IN TELEGRAM
90👍13👎8
🚀 В Jetpack Saved State добавили поддержку KotlinX Serialization

Теперь с помощью методов encodeToSavedState() и decodeFromSavedState() можно сохранить любой класс с аннотацией @Serializable. Можно попробовать в версии 1.3.0-alpha05

Всё это доступно в KMP Common коде и теперь Parcelize не нужен будет

#jetpack #kmp #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍55🔥51
🚀 SavedStateHandle в ViewModel получил поддержку KMP

Благодаря поддержке KotlinX Serialization в SavedState получилось сделать перенос сохранения ViewModel в KMP Common код. Появился специальный делегат saved(), который делает сохранение и восстановление

#jetpack #kmp #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥30👍1
⚙️ В CameraX 1.5.0 (пока в статусе альфа) появится поддержка Compose из коробки

#compose #camerax #камера #jetpack #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🔥10
Пример App Widget из Tier 1
👉 Персонализированы (работают с Material You)
👉 Используют всё доступное место
👉 Следуют лучшим практикам размещения компонентов
👉 Полезные для пользователя

#android #androiddev
👍34👎73
🧠 OpenAI представила Codex — нового AI-ассистента для разработчиков

Codex — это облачный агент, встроенный в ChatGPT, который помогает писать код, находить и исправлять баги, запускать тесты и даже предлагать pull request’ы. Он работает в изолированной среде, предварительно загруженной вашим репозиторием, и может выполнять задачи параллельно.

🔧 Как подключить Codex в IDE?

На данный момент Codex интегрирован в ChatGPT и доступен подписчикам Pro, Team и Enterprise. Для использования в IDE можно воспользоваться следующими способами:
1. GitHub Copilot: Интегрируется с VS Code, JetBrains и другими IDE. Copilot использует модели OpenAI для автодополнения кода.
2. Codex CLI: Лёгкий агент, работающий в терминале. Устанавливается через npm и позволяет взаимодействовать с кодом напрямую из командной строки.

🧪 Как попробовать Codex?

Если вы подписаны на ChatGPT Pro, Team или Enterprise, Codex уже доступен вам через боковую панель в ChatGPT. Просто введите запрос и нажмите “Code” для генерации кода или “Ask” для вопросов о вашем коде. Позже обещают в подписку Plus и Edu

#AndroidDev #OpenAI #Codex #AI #Разработка #ChatGPT
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🤯41🤔1
🚀 Новая Jetpack библиотека - Test Uiautomator Shell

Показали первую альфа версию Jetpack Test Uiautomator Shell - решения для выполнения команд в терминале. Фактически это backport UiAutomation.executeShellCommandRwe из API 34 (Android 14).

#android #androiddev #тестирование #автотесты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍152🔥2
🤖 Почему разработчик не контролирует, как выглядят уведомления в системной панели

Когда разработчик использует NotificationCompat.Builder для создания уведомлений из Android приложения, может показаться, что прямого контроля на внешний вид нету 🤯 На самом деле формируется не визуальный компонент, а объект данных, который описывает что есть в уведомление.

Этот объект — это просто структура, сериализуемая через Parcelable. Он передаётся в системный процесс через Binder — механизм межпроцессного взаимодействия в Android. А вот принимать и интерпретировать этот объект будет специальное системное приложение — SystemUI.

Уведомления отображаются не Android сам по себе, а конкретное приложение, которое называется com.android.systemui. И это приложение полностью отвечает за то, как будет выглядеть уведомление. Оно решает, какие поля отобразить, где их разместить, какой стиль применить, как будет выглядеть кнопка, будут ли видны иконки — и многое другое. Часть из данных может игнорироваться.

Вот почему одно и то же уведомление может выглядеть совершенно по-разному на разных устройствах и версиях ОС. Один и тот же вызов setContentTitle("Новость") может дать совершенно разный результат на Pixel с чистым Android и на Xiaomi с MIUI. Более того, даже RemoteViews, которые позволяют задавать кастомные layout’ы для уведомлений, могут игнорироваться или ограничиваться прошивками производителей.

Именно по этой причине я не люблю когда в уведомления вставляют Custom View, который выбивается из стиля и часто портит визуал системы и поведение. Мечтаю чтобы его поскорее запретили в Android. Пожалуйста, хотя бы в Android 17 🙏

Запомните ‼️ Уведомление в Android — это не UI объект, это контракт между приложением и SystemUI, который интерпретируется, а не исполняется дословно. Поэтому пишите уведомления так, чтобы они были понятны системе, а красоту UI вы можете контролировать только внутри вашего приложения.

#android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍756
🚀 Media3 1.8.0 — апдейт, который стоит внедрить прямо сейчас

Google продолжает прокачивать медиа API, и в этом релизе есть фичи, которые экономят время разработки и улучшают UX.

📺 ExoPlayer
👉 Плавная перемотка: новый ScrubbingMode делает скролл прогресс-бара без отрыва пальца супер-отзывчивым. Пользователь почувствует разницу.
👉 Встроенная видео-реклама: нативная поддержка Ads Interstitials в стриминге — меньше костылей.
👉 Длительность видео без проигрывания:
val duration = MetadataRetriever
.Builder(context, mediaItem)
.build()
.use { it.retrieveDurationUs().await() }

👉 PreCacheHelper — загрузка контента по частям для более быстрых стартов.

🎵 MediaSession
👉 Плеер в шторке не исчезает сразу после паузы — пользователю проще вернуться к просмотру.

✂️ Transformer API
👉 Экспериментальная обрезка видео через MP4 edit list.
👉 Опция CodecDbLite — ускоряет кодирование, подбирая оптимальные настройки под чипсет:
Transformer.Builder()
.setEncoderFactory(
DefaultEncoderFactory.Builder()
.setEnableCodecDbLite(true)
.build()
)
.build()


💡 Почему обновляться сейчас
👉 Меньше кастомного кода — больше нативных возможностей.
👉 Повышение отзывчивости плеера = выше удержание пользователей.
👉 Новые API для подготовки к интеграции рекламы и улучшенного UX.

Подробнее в анонсе или в changelog

#android #AndroidDev #Jetpack #Media3 #ExoPlayer
Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🔥131
Media is too big
VIEW IN TELEGRAM
🪙 Как ускорить приложение с помощью ART Profile (20 мин)

Виртуальная машина ART появилась в 5.0, а затем прошла огромную эволюцию и улучшается каждый релиз ОС. В новом видео рассказываю про то, как прокачали компиляцию кода приложения, что ‼️ ОБЯЗАТЕЛЬНО надо сделать каждому разработчику и покажу как быстро ускорить ваше приложение.

Все видео для платных подписчиков можно найти тут

Если вам нравится что мы всей командой делаем для вас - ваше поддержка деньгами очень для нас важна.

#AndroidBroadcast #Android #AndroidDev #подкапотом
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🤯61
Media is too big
VIEW IN TELEGRAM
🤖 Пример работы расширенной темной темы с Compose приложением. Тут придется темную делать сам, так как настройка не повлияла

#android16 #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔15👍9🏆3🤯2
🏝 Kotlin where: Элегантное ограничение типов для чистоты и безопасности

Как часто в Android-разработке вы видели сомнительные as-приведения? 🤔

Вот пример, который недавно попался мне на глаза:

class Sample(private val activity: Activity) {

fun doSomething() {
// Опасно! Может упасть с ClassCastException,
// если activity не реализует LifecycleOwner
(activity as LifecycleOwner).lifecycle.addObserver(...)
}
}


Опустим тот факт, что здесь стоит использовать слабую ссылку (WeakReference) на Activity. Меня больше смутила необходимость вручную приводить Activity к LifecycleOwner.

Да, в современной Android-разработке AppCompatActivity и FragmentActivity реализуют этот интерфейс. Но наша цель — писать чистый и стабильный код, который не полагается на слепую веру, а гарантирует безопасность на уровне типов.

💡Решение: Ограничение типов с помощью where

В Kotlin мы можем использовать условие where для универсальных параметров, чтобы указать: «класс A должен быть одновременно и Activity, и LifecycleOwner

class Sample<A>(private val activity: A)
where A : Activity,
A : LifecycleOwner {

fun doSomething() {
// Теперь activity можно использовать как LifecycleOwner
// БЕЗОПАСНО и без приведения типов
activity.lifecycle.addObserver(...)
}
}


Этот же подход отлично работает и для функций:

fun <A> doSomethingWith(activity: A)
where A : Activity,
A : LifecycleOwner {
// Полная типобезопасность
activity.lifecycle.addObserver(...)
}


В чем выигрыш?

Безопасность: Компилятор гарантирует, что в класс Sample или функцию doSomethingWith можно передать только объект, который удовлетворяет обоим условиям:
1️⃣Исключаются ошибки ClassCastException в рантайме.
2️⃣Чистота кода: Исчезают громоздкие и опасные приведения через as.
3️⃣ Выразительность: Сигнатура класса/функции явно сообщает о своих требованиях к переданным зависимостям.

Используйте силу системы типов Kotlin на полную! Это делает код не только чище, но и стабильнее. 💪

#kotlin #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍161🔥3622
Media is too big
VIEW IN TELEGRAM
📹 What's new in Android Studio's AI Agent (EN,43м) Запись с внутреннего мероприятия Google

Узнайте, как ИИ-агент в Android Studio может значительно повысить вашу эффективность и качество приложений. Познакомьтесь с практическими возможностями на базе искусственного интеллекта: интеллектуальным преобразованием кода, автоматическим обновлением версий и новым набором инструментов для работы с интерфейсом, которые помогут создавать лучшие приложения быстрее.

#androidstudio #ai #ии #android #androiddev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥43