Android Good Reads
4.09K subscribers
366 photos
15 videos
1 file
2.11K links
Самые интересные статьи, видео и новости, связанные с Android разработкой. Не больше трёх материалов в день.

Автор канала: @Lamprof

Размещение рекламы: @tanyasanovna
Download Telegram
Вчера состоялся первый день конференции IntelliJ IDEA Conf 2025. Да-да и такая есть! Хоть и с небольшим запозданием, но мы получаем обновления из IntelliJ в Android Studio, так что относится и к нам.

Запись первого дня можно глянуть тут
Сегодня трансляция будет на официальном канале
👍5😁2
Меняем Android Studio на IntelliJ IDEA ради JetBrains Junie

Что за проблемы возникли:
👉 Android Plugin немного отстает от последних версий Android Studio
👉 Несколько полезных плагинов недоступны для установки в IDEA (Firebase Services, Firebase Testing, Test Recorder, Android APK Support, Android NDK Support, Android SDK Upgrade Assistant, Google Cloud Tools for Android Studio, App Links Assistant)
👉 Некоторые плагины нужно установить вручную(Android,Android Design Tools, Jetpack Compose, Smali Viewer), некоторый функционал дублируется

Android Studio хорошо заточена под Android разработку, но когда хочется потрогать последние фичи из IDEA - свитчнуться возможно!
👍5🔥3😁3💅21🤷‍♂1
Android Good Reads
Rich Errors в Kotlin 2.4 Анонсировали на KotlinConf. На мой взгляд, классная обертка на замену старому-доброму try-catch. Какие возможные проблемы видите в этом?
Еще 1 анонс - name-base разделение переменных.

Position-base:
val talk = Talk(title = "Kotlin Conf 2025", speakerName = "Darren Le")

val (speakerName, title) = talk
print("title = $title, speakerName= $speakerName")
// title = Darren Le, speakerName = Kotlin Conf 2025


Name-base:
(val speakerName, val title) = talk
print("title = $title, speakerName= $speakerName")
// title = Kotlin Conf 2025, speakerName = Darren Le


Как несколько лет назад, именованные параметры сделали вызов функций удобнее и безопаснее. Теперь так и с разворачиванием классов.

👍 - Полезно
👎 - Не вижу смысла использовать
👎92👍60🤔2
Android Good Reads
Еще 1 анонс - name-base разделение переменных. Position-base: val talk = Talk(title = "Kotlin Conf 2025", speakerName = "Darren Le") val (speakerName, title) = talk print("title = $title, speakerName= $speakerName") // title = Darren Le, speakerName =…
Остальные анонсы с конференции от Marcin Moskała, кроме уже разобранного:

👉 Улучшенная работа с плагинами (скрин выше)
👉 Упрощение дебага корутин
👉 Агентов и MCP теперь можно писать и на Kotlin!
👍52🔥2
Android Good Reads
Что изменится в Android 16? Отмена ограничений по ориентации экрана и изменению размера окна Кратко - много боли для тех, кто не делает адаптивный дизайн приложения. C Android 16 будут игнорироваться значения: 👉 screenOrientation: portrait, reversePortrait…
Релиз Android 16

Многое уже разбирали с вами на канале:

👉 Новые API камеры
👉 Material 3 Expressive уже будет проявляться в системных приложениях
👉 Адаптивный дизайн, как стандарт
👉 Обновления для кнопки назад
👉 Улучшения для ProgressStyle виджетов
👉 Новые инструменты для профайлинга
👉 Усложнения в области security
👍73
Порадуемся за код, который мы не написали

Вся статья сводится к простой мысли. Не переусложняйте и декомпозируйте задачи, благо современные технологии (Composable, например) это позволяют.
Programmers often like working on complex systems, but I believe that it’s important to practice breaking down that complexity into simpler systems.
👍11
keepScreenOn в Jetpack Compose

Как это было:
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

или
window.decorView.keepScreenOn = true

или тег в xml:
android:keepScreenOn="true"


Начиная с compose 1.9.0-alpha01 это можно сделать модификатором
Box(
modifier = Modifier.keepScreenOn()
){
Text("Keep the screen on.. 🔆")
}
🔥27👍84🤯4
Autofill в Compose 1.8.0

Несмотря на то что поддержка автозаполнения вышла еще 2021 году, API докрутили только сейчас. Поддержка самой кнопки Autofill теперь идет из коробки, а новое API позволяет спарсить значение даже внутрь Switch:
var firstLetterE by remember { mutableStateOf(false) }
Switch(
modifier = Modifier.semantics {
contentType = ContentType.EmailAddress

// We need to declare a data type explicitly since this isn't a TextField
contentDataType = ContentDataType.Text

onAutofillText { text ->
firstLetterE = text.startsWith("E", ignoreCase = true)
true
}
},
checked = firstLetterE,
onCheckedChange = { firstLetterE = it },
)
👍122🗿2
Как-то мы упустили этот весь тренд с AI и вайбкодингом. Но вот и до Android Studio добралась возможность повайбкодить. Agent-mode в Gemini.

Не что-то прорывное, но раньше нужно было переключаться меж IDE или использовать Junie, а теперь решение из коробки!
👍8🔥32
Android Good Reads
Как-то мы упустили этот весь тренд с AI и вайбкодингом. Но вот и до Android Studio добралась возможность повайбкодить. Agent-mode в Gemini. Не что-то прорывное, но раньше нужно было переключаться меж IDE или использовать Junie, а теперь решение из коробки!
Я не хочу превращать Android канал в новостник на тему очередного прорыва в AI, поэтому соберу в кучу несколько полезных статей и холиварных топиков, которые отражают мою позицию.

👉 Как AI влияет на способность думать "гораздо проще написать промпт, закинуть его в чат, и сразу же получить разжеванный ответ"
Да, вместо долгого исследования - ты получаешь ответ с ссылками откуда была взята информация. Так быстрее и непривычнее. Время на техническое исследования сокращается кратно и появляется больше времени на продуктовый ресерч

👉 Вайбкодинг vs Метакодинг. Статья на редите. Выглядит, как естественное развитие одного из другого. Сначала ты просто копируешь со стековерфлоу, затем ты уже думаешь что копировать. Все через это проходили, правда? Так и тут, сначала бездумно забираем ответ AI, потом учимся задавать правильные вопросы и выбираем необходимое

👉 Смотрим как Copilot Agent сводит разработчиков с ума. Да, часть решаемых им задач приходится вот так вот Vibe-дебажить, но часть он решает и успешно закрывает в фоне. Очевидно, что разработка постепенно меняет формат того как она будет выглядеть. Это не очередные фантазии, а реальные контрибьюты в dotnet репу: Неудачный и смешной - Удачный. Так что, как минимум, пробуем на своих проектах. Важный скилл - грамотно описать задачу.

По работе я пользуюсь GitHub Copilot. Он, даже с последними моделями, недотягивает до Cursor, но берет большим количеством интеграций с GitHub. Gemini, интегрированный в Android Studio, использует модель 2.5 с откатом к 2.0, что делает генерируемый код совершенно непригодным к ревью. До Android разработки вайбкодинг дойдет не скоро, как мне кажется. База для обучения была сильно меньше, чем для фронтенд кода, что сказывается на качестве. Большинство AI IDE построены на базе vsCode, что вынуждает переключаться меж IDE, а не сидеть в удобном и привычном месте.

А какой опыт у вас?

👍 - Больше статей по AI связанных с Android разработкой
😐 - Только если реально что-то интересное
👎 - Не надо статей по AI
😐80👍25👎21💅3
Рабочая группа по продвижению использования Swift в android разработке

Основная идея - сделать Android официально поддерживаемой платформой языка Swift. Задачи перед собой поставили стандартные для кроссплатформенного фреймворка, обсуждение открытое, так что можете поучаствовать.

А чтобы быть готовым - пойду подпишусь на iOS Good Reads (@iosgr)
🥴227👍4🔥4😁4
Недавний релиз Kotlin 2.2.0

👉 Фича в превью: контекстные параметры
👉 Экспериментальные функции теперь стабильны: guard conditions, нелокальные операторы break и continue, а также multi-dollar интерполяция строк.
👉 Унифицированное управление предупреждениями компилятора.
👉 Изменения в генерации методов по умолчанию для функций в интерфейсах.
👉 Поддержка LLVM 19 и новые возможности для отслеживания и настройки потребления памяти
👉 Разделение Wasm-таргета и возможность настраивать Binaryen для каждого проекта
👉 Исправлена работа метода copy, генерируемого для интерфейсов с аннотацией @JsPlainObject
👉 В плагин Kotlin Gradle включена проверка бинарной совместимости.
👉 API для Base64 и HexFormat теперь стабильны.

10 июля в 16:00 UTC будет стрим с разработчиками
👍7🔥54
Уменьшаем размер приложения

Вам стоит пропустить эту статью если у вас уже настроено:
👉 Минимальный R8 со специфичными правилами под каждую библиотеку. Вы проверяете его работу не на проде, а с помощью testProguardFiles, например
👉 Перевели все картинки в webp формат, вырезали ненужные ресурсы в конфигурациях
👉 Аккуратно переиспользуете layout
👉 Используете appBundle
👍62🔥1
Шпаргалка по flow операторам

Внутри примеры кода с пояснением для:
👉 map, filter, take(n)
👉 reduce, fold, runningReduce/scan,
👉 transform
👉 FlatMapConcat, FlatMapMerge, FlatMapLatest
👉 flowOn, buffer, conflate, collectLatest
👉 zip, combine, merge
👉 catch, onCompletion, retryWhen
👉 onEach, debounce(timeoutMillis), distinctUntilChanged

Проверяем себя, что все вышеперечисленное использовали хоть раз и знаем!
👍14🔥42
Так как я чертовски заинтересован в увеличении комьюнити CMP разработки, то вот вам свежая и полезная библиотечка Alarmee, которая является оберткой для всякого рода пушей.
Firebase, Локальные, Отложенные и повторяющиеся пуши - всё тут!
Никаких больше болей по надстройке пушей на платформах!
10👍7🔥2👎1
Про поддержку 16KB page

Зачем?
Девайсы с поддержкой 16 KB работают быстрее на 5-10%, а так же:
👉 Старт приложений быстрее (до 30% для некоторых приложений, 3.16% в среднем),
👉 Меньше расход батареи (на 4.56% меньше)
👉 Быстрее запуск камеры (4.48-6.60%)

Как?
👉APK Analyze/Alignment Checks/Lint поможет найти вселомающую зависимость
👉Обновляем AGP до 8.5.1+, NDK до r28+.
👉Если не помогло то кропотливо выискиваем нужные флаги из официальных рекомендаций

Тестируем
Необходимые эмуляторы уже в Android Studio
👍113🔥2🏆1