Как перестать мучиться с лицензиями и полюбить Open Source в своих проектах
Знакомая ситуация: вы выпускаете приложение в Google Play или App Store, и вдруг вспоминаете, что по условиям лицензий Apache 2.0 или MIT вы обязаны указать всех авторов использованных библиотек. Начинается судорожное копирование названий из build.gradle, поиск ссылок на GitHub и верстка бесконечных экранов «About». А если библиотек пятьдесят? А если они обновляются каждую неделю?
В моей практике это всегда было той самой рутиной, которую откладываешь на последний момент. Но, как оказалось, сообщество уже давно придумало элегантное решение. Сегодня разберем AboutLibraries — инструмент, который превращает головную боль с лицензиями в автоматизированный и красивый процесс.
Что это такое и зачем оно вам?
AboutLibraries — это не просто библиотека для отрисовки экрана «О программе». Это мощный плагин для Gradle и набор UI-компонентов, которые умеют сами «выуживать» информацию о ваших зависимостях прямо во время сборки.
Проект живет и активно развивается Майком Пенцем (Mike Penz) уже более десяти лет. За это время он эволюционировал из простого Android-инструмента в полноценное решение для Kotlin Multiplatform (KMP), поддерживающее Android, Desktop (JVM), iOS и даже Web (Wasm).
Главная фишка: нулевое влияние на производительность (zero runtime overhead). Вся тяжелая работа по сбору данных происходит на этапе компиляции, а ваше приложение получает уже готовый легковесный JSON с метаданными.
Почему это круто: 5 главных фич
1. Полная автоматизация через Gradle
Вам не нужно вручную вписывать названия библиотек. Плагин сам сканирует ваш проект, находит транзитивные зависимости (те, что подтягивают ваши библиотеки) и вытягивает тексты лицензий из POM-файлов.
2. Поддержка Compose Multiplatform
Если вы пишете на Compose, интеграция займет буквально пару минут. Есть готовые модули для Material 2 и Material 3. Вы просто вызываете LibrariesContainer, и вуаля — профессиональный список готов.
3. Режим «Строгого контроля» (Strict Mode)
Это киллер-фича для корпоративной разработки. Вы можете составить белый список разрешенных лицензий (например, только MIT и Apache). Если кто-то из команды случайно подтянет библиотеку с «токсичной» лицензией GPL, сборка просто упадет, не дав юридическим проблемам попасть в продакшн.
4. Кастомизация без границ
Не нравится стандартный вид? Вы можете переопределить любой элемент: добавить свой хедер с логотипом компании, изменить разделители или вообще использовать Core-модуль, чтобы вытащить данные и отрисовать их в своем уникальном стиле.
5. Поиск спонсоров
Интересно, что проект умеет находить ссылки на финансирование (funding) авторов библиотек. Это отличный способ напомнить пользователям (или самим себе), что Open Source держится на энтузиастах.
Как это работает «под капотом»?
Архитектура проекта разделена на две части:
- Gradle Plugin: Он «прочесывает» граф зависимостей, скачивает тексты лицензий и генерирует файл
aboutlibraries.json. - UI/Core Modules: Они читают этот JSON и превращают его в объекты Kotlin или готовые UI-виджеты.
Кстати, в последних версиях (v13+) автор разделил плагин на основной и специфичный для Android. Это позволило улучшить совместимость с Configuration Cache в Gradle, что делает сборку еще быстрее.
Быстрый старт: как внедрить за 5 минут
Для начала добавим плагин в ваш libs.versions.toml (ведь вы уже используете Version Catalogs, верно?):
[versions]
aboutLibraries = "11.2.3" # проверьте актуальную версию
[plugins]
aboutLibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutLibraries" }
Затем в build.gradle.kts вашего приложения:
plugins {
id("com.mikepenz.aboutlibraries.plugin")
}
// Если у вас Android-проект, плагин сам подцепит зависимости
А вот так выглядит вызов экрана в Compose:
val libraries by produceLibraries(R.raw.aboutlibraries)
LibrariesContainer(
libraries = libraries,
modifier = Modifier.fillMaxSize()
)
Практические кейсы
Кейс 1: Юридическая чистота
Вы работаете в финтехе. Юристы требуют отчет по всем используемым компонентам. Вместо ручного сбора вы запускаете команду:
./gradlew exportComplianceLibraries
И получаете CSV-файл со всеми лицензиями, версиями и ссылками. Юристы счастливы, вы продолжаете писать код.
Кейс 2: Мультиплатформенность
Вы делаете приложение на KMP для Android и Desktop. С AboutLibraries вам не нужно писать разную логику для отображения лицензий. Общий код в commonMain будет работать везде одинаково, подтягивая данные из ресурсов.
Нюансы и советы
Интересно, что при использовании AGP 9.0 и агрессивном сжатии ресурсов (Resource Shrinking), сгенерированный JSON может случайно удалиться. Чтобы этого избежать, не забудьте добавить правило в keep.xml:
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@raw/aboutlibraries" />
Также помните, что плагин видит только то, что прописано в Gradle. Если вы используете нативные библиотеки (например, подложенные .so файлы вручную), их придется добавить в конфиг плагина самостоятельно через JSON-описания.
Итог: стоит ли оно того?
Если ваше приложение состоит более чем из трех библиотек — однозначно да. AboutLibraries избавляет от самой скучной части разработки, гарантирует юридическую безопасность и при этом выглядит современно.
Это один из тех инструментов, которые настраиваешь один раз и забываешь, а он продолжает работать и приносить пользу с каждым обновлением зависимостей.
Кому подойдет:
- Android-разработчикам (от новичков до профи).
- Командам, переходящим на Kotlin Multiplatform.
- Всем, кто ценит свое время и хочет соблюдать правила Open Source сообщества.
Попробовать проект можно здесь: mikepenz/AboutLibraries. А если проект вам поможет — не забудьте поставить ему звезду, Майк это заслужил!
