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

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

РКН https://abdev.by/rkn_tg_ab #MQRZR
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🐘 Gradle Develocity плагин стал доступен в Android Studio 🔨

Develocity IntelliJ плагин интегрирует возможности Develocity и Build Scan прямо в IDE. В реальном времени будете видеть информацию о вашей производительность вашей Gradle сборки

#gradle #androidstudio
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥65👍182
🐘 Вышел Gradle 9.0

Самое важное в Gradle 9 - ❗️пришло время адаптировать Configuration Cache❗️. Пока его не включили по умолчанию и отложили до 10 версии, но включение режима - рекомендованный подход для всех! Кэш конфигурации очень сильно прокачали и улучшили, он уже готов к использованию!

Что еще:
👉 Обновили используемый Kotlin до версии 2.2, а Groovy до версии 4.0
👉 Kotlin build script теперь поддерживают compilation avoidance - будет пропускаться их повторная компиляции, если не найдется значимых изменений. Это положительно скажется на время сборке, если вы используете Kotlin в buildSrc
👉 Перешли на использование JSpecify Nullability аннотаций
👉 Минимальная версия Java - 17
👉 Улучшения для авторов плагинов

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

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉39👍10🔥82
Media is too big
VIEW IN TELEGRAM
📹 Обзор что нового в Gradle 9.0 (EN, 25м)

00:00 – Что нового в Gradle 9 и как обновиться
03:08 – Configuration Cache
08:59 – Поддержка Kotlin 2.2
10:10 – Kotlin build script compilation avoidance
10:46 – Улучшения nullability в Gradle API
14:05 – Gradle теперь требует Java 17 или выше
15:39 – Обновление до Groovy 4
16:43 – Reproducible архивы включены по умолчанию
19:00 – JAVA_HOME теперь может использоваться как источник toolchain в Daemon JVM
21:39 – Gradle Wrapper теперь поддерживает символьные версии и SemVer (например, latest.release)
23:32 – Какие фичи стали стабильными, что устарело и что удалено
25:05 – Полезные ссылки на документацию и ресурсы
26:06 – Рекомендованные best practices для работы с Gradle 9
26:53 – Заключение

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26
Media is too big
VIEW IN TELEGRAM
📹 Gradle выложили мини курс по переиспользованию build логики между Gradle модулями (EN, 6 уроков, 30 минут)

00:00 - Папка buildSrc
02:06 - Convention Plugin
09:29 - Version Catalog
15:58 - Общие Task
19:09 - Производительность buildSrc
23:32 - included build

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍57🔥103🤔1🤯1
🐘 Вышел Gradle 9.1.0 с поддержкой Java 25 и новыми фичами. Из интересно - "Визуалиация таска графов", но сразу грусть - не ждите картинки 😡 Насыпали везде по немного улучшений, запромоутили фичи в стабильные, поправили баги и на этом всё.

#gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33
⚠️ Работа с зависимостями в Gradle таит множество подводных камней:
- Откуда берётся зависимость?
- Какие транзитивные зависимости подтянутся вместе с ней?
- Как убедиться, что скачался именно тот артефакт, который вы ожидали?

Чтобы сборка была стабильной, безопасной и быстрой, стоит придерживаться ряда практик 👇

1️⃣ Используйте единый источник зависимостей

В больших компаниях принято разворачивать свой Nexus / Artifactory. Он проксирует остальные репозитории (MavenCentral, Google и др.), и для проекта остаётся один источник правды.

Это ускоряет сборку (репозиторий ближе и быстрее), а также защищает от случайного скачивания библиотек «из непонятного интернета».

2️⃣ Ограничивайте содержимое репозиториев

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

Например, для Google Maven:

// settings.gradle.kts
dependencyResolutionManagement {
repositories {
google {
mavenContent {
includeGroupAndSubgroups("androidx")
includeGroupAndSubgroups("com.android")
includeGroupAndSubgroups("com.google")
includeGroupAndSubgroups("org.chromium.net")
includeGroupAndSubgroups("com.crashlytics.sdk")
}
}
mavenCentral()
}
}


Так вы избежите ненужных запросов в «левые» репозитории.

3️⃣ Проверяйте скачанные артефакты

Gradle поддерживает dependency verification. Это позволяет проверить контрольные суммы загружаемых артефактов и защититься от подмены.

📖 Документация: Dependency Verification

Пример gradle/verification-metadata.xml:
<verification-metadata>
<configuration>
<verify-metadata>true</verify-metadata>
<verify-signatures>false</verify-signatures>
</configuration>

<components>
<component group="org.apache.pdfbox" name="pdfbox" version="2.0.17">
<artifact name="pdfbox-2.0.17.jar">
<sha512 value="..." />
</artifact>
</component>
</components>
</verification-metadata>


4️⃣ Ограничивайте транзитивные зависимости

Любая библиотека подтягивает за собой десятки других. Чтобы не получить неожиданное поведение или небезопасные версии — используйте constraints:
dependencies {
implementation("org.apache.httpcomponents:httpclient")

constraints {
implementation("org.apache.httpcomponents:httpclient:4.5.3") {
because("previous versions have a critical bug")
}
implementation("commons-codec:commons-codec:1.11") {
because("version 1.9 pulled from httpclient has issues")
}
}
}


А если нужно зафиксировать версии жёстко:
configurations.all {
resolutionStrategy {
force("org.example:lib:1.2.3")
// Есть много других возможностей
}
}


5️⃣ Анализируйте дерево зависимостей

Чтобы понять, кто и что тянет, используйте:
./gradlew dependencies
./gradlew dependencyInsight --dependency okhttp --configuration releaseRuntimeClasspath


Это поможет отловить дубликаты и неожиданные версии.


6️⃣ Автоматизируйте обновления

Поддерживайте проект в актуальном состоянии:
🔄 используйте Gradle Versions Plugin, чтобы проверять обновления библиотек.
📝 заведите политику обновлений (например, обновлять минорные версии раз в месяц, а мажорные — отдельно и осознанно).

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

#gradle #лучшиепрактики
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7314🔥4🤯2
🚀 Чтобы ускорить работу с Gradle рекомендую всем включить в настройках IDE параллельную работу синхронизации IDEA и Gradle проекта.

🐘 Что даёт включение «parallel fetching»

По умолчанию Gradle получает модели последовательно — по одному модулю за раз.
С включённой опцией IDE может запрашивать модели параллельно для нескольких модулей, что:
👉 ускоряет синхронизацию крупных многомодульных проектов;
👉 сокращает время обновления проекта после изменения Gradel build-файлов;
👉 лучше использует возможности CPU

#gradle #androidstudio #idea
Please open Telegram to view this post
VIEW IN TELEGRAM
👍69🔥52
🪙 Разрабатываю Gradle плагин для Swift кода в Android сборке (2 ч)

Не так давно разобрал как работает Swift для Android, но там совсем "на скорую руку" сделали интеграцию с Gradle билд системой.

Решил показать как будет сделать нормальный плагин по лучшим практикам Gradle. Демонстрация разработки в новом видео.

Если у вас есть проблемы с Boosty - пишите @ab_manager

#AndroidBroadcast #Gradle #Swift #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍13🔥94🤯1
🤖 Готовьтесь к Android Gradle Plugin 9.0 — грядут большие перемены!

Совсем скоро состоится релиз Android Gradle Plugin 9.0 (AGP), который полностью меняет подход к конфигурации Android‑проектов: удаляет устаревшие API, упрощает настройку и пересматривает организацию конфигурации.

Ключевые изменения:
👉 Переход на Gradle 9.X
👉 Поддержка Kotlin теперь встроена в AGP — подключение org.jetbrains.kotlin.android больше не требуется и даже будет рушить сборку. Из плюсов — минус один плагин.
👉 Плагин org.jetbrains.kotlin.multiplatform больше не будет работать с com.android.library и com.android.application. Используйте com.android.kotlin.multiplatform.library, а для приложения создавайте отдельный модуль.
👉 Массовые изменения в API — множество удалений без прямых альтернатив. В целом идёт отказ от старых публичных интерфейсов, ведь новые уже давно доступны, и авторы плагинов могут их использовать.
👉 Некоторые возможности конфигурации теперь будут доступны только в библиотечном плагине.

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

Подробнее обо всех изменениях — в документации

Надеюсь, Android Studio добавит ассистента по миграции. А вот авторам плагинов, похоже, прибавится работы 😅

Как вам перемены? Пойдут ли они на пользу скорости сборки и удобству использования AGP?

#Android #AndroidDev #Gradle #AGP #AndroidStudio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍367🔥5👎1
🤖 AGP 9.0: Fused Library Plugin — новый способ публикации нескольких модулей как один AAR

В Android Gradle Plugin (AGP) 9.0 и новее появился инструмент, которого ждали многие разработчики SDK и библиотек. Встречайте плагин Fused Library (com.android.fused-library). Пока в экспериментальном режиме.

Раньше, если вы разбивали свой код на много модулей, перед вами вставала дилемма: заставлять пользователя подключать 5 разных зависимостей или использовать неофициальные "fat-aar" скрипты. Теперь Google предлагает нативное решение.

Fused Library плагин позволяет взять несколько Android Library модулей и упаковать их в один AAR [1].

1️⃣ Для включения фичи надо будет добавить флаг в gradle.properties:
android.experimental.fusedLibrarySupport=true


2️⃣ Затем создаем модуль для публикации (например, my-sdk-fused). В его build.gradle.kts добавляем:

plugins {
id("com.android.fused-library")
`maven-publish`
}

androidFusedLibrary {
namespace = "dev.androidbroadcast.mysdk"
minSdk = 23
}

dependencies {
// Указываем модули для "слияния"
include(project(":core"))
include(project(":ui-components"))
// Можно вливать даже внешние либы!
include("dev.androidbroadcast:cool-fonts:1.0")
}

Обратите внимание на include — это ключевая команда для упаковки.

3️⃣ Используем компонент fusedLibraryComponent при публикации артефакта:

publishing {
publications {
register<MavenPublication>("release") {
groupId = "dev.androidbroadcast"
artifactId = "fat-sdk"
version = "1.0.0"
from(components["fusedLibraryComponent"])
}
}
}


Инструмент мощный, но есть особенности:
Data Binding не поддерживается.
⚠️ Ресурсы: При совпадении имен побеждает ресурс из зависимости, указанной первой.
⚠️ Build Types: Нельзя слить debug и release в один проход, нужны разные fused-модули.
🐞 Source JAR: Пока есть известные проблемы с генерацией исходников.

Подробнее читайте в [документации](https://developer.android.com/build/publish-library/fused-library)

#Android #AndroidDev #Gradle #AGP #Maven
Please open Telegram to view this post
VIEW IN TELEGRAM
👍38🔥165👎1