Android Broadcast
14.1K subscribers
3.41K photos
301 videos
11 files
5.71K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
Цикл статей про Gradle Convention плагины - подход к переиспользованию кода между Gradel скриптами
1️⃣ Подготовка и настройка базового модуль для написания Gradle Convention Plugins (8м)
2️⃣ Разработка convention-плагинов в KTS (11м)
3️⃣ Разработка convetion-плагина в Kotlin коде (9м)
4️⃣ Рефакторинг и полировка видимости кода (6м)

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
Разработчик предложил подход(5м) как в Gradle можно заменить множество зависимостей на такой удобный вариант переиспользования

#gradle
Разработчики SDK поделился как создавали систему (8м) для слежения за важными метриками и регулярной публикации отчёта с ними. Разработали Gradle плагин (исходный код тут), а пример подключения смотрите тут

#gradle
Вышел Gradle 8.11 🐘
🚀 Параллельная загрузка и сохранение Configuration Cache
☕️ Ошибки компиляции Java будут показывать в конце build отчета
📜 Объединенный отчёт по предупреждениям и deprecated вызовам
🛠 Исправление багов

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
🐘 Показали вторую превью Declarative Gradle - DSL для удобной настройки проектов без копания в Groovy/Kotlin скриптах

В новой сборке поддержали конфигурацию Android Gradle плагина

#gradle #agp
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🐘 Ускорение сборки Android проекта. Избавляемся от AGP в API-модулях

Уже давно известно что Gradle модули c Java/Kotlin плагином собираются быстрее чем те что с AGP. Статья от разработчика огромного приложения про ускорение сборки. API и IMPL модули уже сделали, а вот теперь делают чистыми API модули

#архитектура #gradle #оптимизация #agp
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝🎉 Вышел Kotlin 2.1.0

👉 Новые фичи языка (разберу отдельно в @kotlin_broadcast, но ничего такого)
👉 Улучшения K2 компилятора, что также повлияло и на kapt (который deprecated)
👉 KMP Базовая поддержка Swift Export, стабильный Gradle для опций компилятора и много чего ещё
👉 В Kotlin/Native улучшили поддержку iosArm64
👉 Поддержка новых версий Gradle и Android Gradle Plugin

Ждем багфиксы в 2.1.10 и потом обновляемся. За разборами с большими подробностями идите в @kotlin_broadcast

#kotlin #gradle #k2 #kmp #swift
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🐘Gradle уже не тот! Что думают разработчики?

В новом выпуске Кирилл Розов и Сергей Боиштян - Билд инженер, Лид команды "Speed" в AvitoTech обсуждают:
🔧 Профессию билд-инженера и основные задачи этой роли.
⚙️ Прогресс в Gradle и Android Gradle плагине.
🌟 Будущее сборок для Android и Kotlin Multiplatform проектов.

Если вы хотите узнать, как изменился Gradle и куда движется мир сборок, это видео для вас!

#AndroidBroadcast #avitotech #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
📹 Демонстрация настройки публикации Android и KMP библиотеки (36 минут)

В новом видео показываю как настроить публикации для Android и Kotlin Multiplatform библиотеки в Gradle с новым механизмом подписи артефактов для Maven Central в 2024

#AndroidBroadcast #видео #gradle #maven #kmp #android
Please open Telegram to view this post
VIEW IN TELEGRAM
Когда идет в работе системы что-то не так, то самый популярный ответ: "Перезагрузи. Не помогло? Сбрасывай"

Это же актуально и для Android проектов. Стандартный "Clean Project" не решит всё, есть еще много всего связанного со сборкой проекта и работой IDE
👉 Удаление папок Gradle build
👉 Удаление кэша Gradle - папка .gradle в корне проекта
👉 Можно удалить весь Gradle кэш в домашней папка пользователя

Почитал эти советы из статьи (EN,13м), где автор еще и автоматизировал всё это через скрипты, которые можно взять в тексте

#androidstudio #gradle
Все мы уже привыкли выкладывать сборки в Google Play через AAB, которые передаст на устройство только необходимое для устройства нативные библиотеки. Некоторым приходится раздавать сборку в APK формате. Банальный кейс - отдавать сборку на проверку QA.

Универсальное APK - содержит ресурсы и библиотеки под все возможные устройства, даже те которые не нужны на устройстве пользователя. Обычно нативные библиотеки делают наибольший вклад в конечный размер приложения на устройстве пользователя. Отказ от ненужных позволит снизить размер и скорость доставки до устройства пользователя.

Android Gradle плагин позволяет указать какие ABI нужно добавлять в сборку. Сложность в том, что для финальной сборки обычно надо добавить ABI arm64-v8a и armeabi-v7a, а вот для Intel эмуляторов нужны x86 и x86-64. Чтобы делать это эффективно, я делал механизм передачи значений ABI через переменные при сборке. Это позволяет задавать локально и на CI разные значения, а локальные задавать через файл local.properties или переменную окружения

// Код в Gradle KTS скрипте
fun resolveAbiFilters(): List<String> {
val abisString =
project.findProperty("abiFilter") as String? // Параметр командной строки
?: readFromLocalProperties("abi.filter") // Значение из local.properties
?: System.getenv("ABI_FILTER") // Переменная окружения

return abisString?.split(",") ?: emptyList()
}

fun readFromLocalProperties(key: String): String? {
val localPropertiesFile = rootProject.file("local.properties")
if (!localPropertiesFile.exists()) return null

val localProperties = Properties().apply {
localPropertiesFile.inputStream().use(::load)
}
return localProperties.getProperty(key)
}


// В Android application модуле указываем
android {
defaultConfig {
ndk {
abiFilters = resolveAbiFilters()
}
}
}


Пример задания через параметр
./gradlew assembleRelease -PabiFilter=arm64-v8a,armeabi-v7a


Если вы запускаете приложения из Android Studio на устройстве/эмуляторе, то IDE понимает какую ABI из поддерживаемых стоит включить в APK, чтобы приложение смогло работать. Все остальные исключается. Сборка компактнее - меньше время на передачу и установку тестового билда.

#android #gradle #ndk
Детские ошибки при сборке Gradle-приложений (10м)

Статья с рекомендациями по ускорению Gradle сборки Android и не только проектов
👉 Прибегайте к инкрементальной сборке
👉 Настройте Gradle Build Cache
👉 Включите Gradle Configuration Cache. Нужно чтобы все подключенные плагины поддерживали Config Cache. Актуальный статус тут
👉 Используйте Gradle Daemon
👉 ABI vs non-ABI зависимости

Всё очень базово и вы не найдете в статье рецепты, но точно подсветит базу

#gradle #android #производительность
Как лишние ресурсы могут повлиять на UI вашего приложения

Библиотеки от Google и других популярных SDK часто содержат строки для десятков локалей, тогда как большинство приложений поддерживают всего 7–10 наиболее востребованных языков.

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

Чтобы избежать подобных ситуаций, вы можете явно задать набор локалей, которые поддерживает ваше приложение. Тогда все ресурсы для неуказанных локалей не попадут в финальный APK, что не только снижает его размер, но и обеспечивает предсказуемость UI.

Пример настройки в build.gradle.kts (application модуль):

android {
androidResources {
// Автоматически сгенерировать список локалей на основе ресурсов проекта
// По умолчанию false
generateLocaleConfig = true

// Либо явно указать поддерживаемые локали
localeFilters.addAll(setOf("en", "ru", "es", "de"))
}
}


Ранее Android Gradle Plugin позволял фильтровать ресурсы по различным группам квалификаторов (например, плотность экрана, ориентация и т.д.), однако начиная с AGP 8.0 эта возможность объявлена устаревшей и поддерживается только фильтрация по локалям. Это связано с тем, что App Bundle эффективно разделяет ресурсы по плотности экрана, а применение других фильтров использовалось крайне редко.

#android #gradle #локализация #лучшиепрактики
🐘 Вышел Gradle 8.13

🔥 Автоматическая загрузка JVM для Gradle Daemon: теперь Gradle может автоматически загружать необходимую версию JVM для работы Daemon, если подходящая версия не найдена локально.
👉 В Scala-плагине появилась возможность явно задавать версию Scala через расширение scala.
👉 Точные временные метки в JUnit XML: временные метки в отчетах JUnit XML теперь имеют миллисекундную точность, что улучшает детализацию отчетов.
🛠 Более 700 мелких исправлений и улучшений

Кроме того, добавлены улучшения для авторов сборок и разработчиков плагинов, включая улучшенный доступ к директории настроек в скриптах сборки, новый отчет о преобразовании артефактов, возможность создания пользовательских отчетов о тестировании и новый плагин distribution-base - сборка ZIP или TAR с необходимыми артефактами из проекта

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🐘 Состояние Gradle Configuration Cache и будущее фичи

В больших проектах на Gradle одной из самых долгих является фаза конфигурации проекта, во время которой создаются все задачи и устанавливаются связи между ними.

Команда Gradle уже давно работает над решением этой проблемы с помощью Gradle Configuration Cache — возможности сохранять результаты фазы конфигурации и повторно использовать их в последующих запусках.

В блоге Gradle вышла подробная статья о текущем состоянии этой функции: State of the Configuration Cache. Согласно статье, начиная с Gradle 9 Configuration Cache будет включён по умолчанию система станет деликатно напоминать о необходимости включения Configuration Cache.

В одном из будущих мажорных релизов после Gradle 9, Configuration Cache станет единственным доступным режимом работы — но только после того, как к этому будет готово всё сообщество.

До этого момента Gradle будет активно улучшать технологию и сотрудничать с партнёрами для расширения совместимости и интеграций.

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖 Как ускоряли скорость сборки в Android-приложении для продавцов Ozon (11 мин)

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

Какие практики применялись:
👉 Включение Gradle Build и Configuration Cache
👉 Разделение тяжелых для сборки модулей на более мелкие, чтобы можно было выполнять работу параллельно
👉 Выделение API-модулей и превращение их в JVM/Kotlin-модули без Android-плагинов
👉 Замена KAPT на KSP
👉 Удаление неиспользуемых зависимостей с помощью анализа от Dependency Analysis Gradle Plugin
👉 Использование нетранзитивных R-классов
👉 Базовые рекомендации от Android-команды
👉 Включение всех опций Gradle для ускорения сборки

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

#android #производительность #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
📹 Почему вам стоит включить Gradle Configuration Cache (46 мин)

Кэширование фазы конфигурации (configuration cache, СС) — одна из самых ожидаемых и очевидных оптимизаций в процессе Gradle-сборки. Однако стабильной эта оптимизация была объявлена относительно недавно — в Gradle 8.1.

Спикер рассказал о сложностях реализации CC и о «неожиданных» улучшениях производительности, которые может принести СС в вашу сборку. Если вы сомневались, поддерживать ли CC в своих сборках, — эти инсайты помогут вам ответить утвердительно.

Чтобы снять магический ореол с реализации Gradle и воодушевить вас на возможные open source-контрибуции, слайды сопровождаются ссылками на open source кодовую базу Gradle.

🔗 Скачать презентацию с сайта Mobius

#gradle #mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
📹 Android Builds: Simple Recipes to Enhance Developer Productivity (26 мин)

Видео с Gradle DPE Summit про основные советы по Gradle для Android разработчиков

00:00 Introduction
00:48 About Toast
03:09 Build Growth Challenges
05:21 Reducing Build Times
06:28 Hardware Solutions
08:08 Gradle Properties
11:36 Memory Management
16:05 Dependency Handling
19:40 CI Optimization
23:35 Agent Configuration
25:38 Conclusion

#android #gradle
Please open Telegram to view this post
VIEW IN TELEGRAM