На этой странице описываются свойства и параметры, необходимые для подготовки проекта библиотеки Android к публикации с помощью плагина Android Gradle (AGP) . Даже если вы задали некоторые из этих свойств в начале создания библиотеки, ознакомьтесь со следующим руководством, чтобы оптимизировать настройки.
Выберите пространство имен
Библиотеки Android должны объявить пространство имен, чтобы они могли генерировать уникальный класс R
при компиляции своих ресурсов. Это пространство имен должно точно соответствовать пакету корневого класса библиотеки, чтобы избежать путаницы, когда пользователи импортируют обычные классы из библиотеки и ее класса R
Начиная с AGP 7.0, вы можете задать пространство имен в файле build.gradle
приложения, как показано в следующем примере кода:
Круто
android { namespace = 'com.example.library' }
Котлин
android { namespace = "com.example.library" }
Пространство имен — свойство библиотеки, доступное разработчику. Оно не связано с идентификатором приложения, который задается с помощью свойства applicationId
.
В предыдущих версиях AGP как свойство applicationId
(для приложения), так и свойство namespace
(для библиотеки) можно было задать с помощью атрибута package
манифеста, что приводило к путанице.
Выберите значение minSdkVersion
Выбор minSdkVersion
для вашей библиотеки является важным аспектом публикации вашей библиотеки. minSdkVersion
должен отражать минимальную версию Android, которую может поддерживать ваш код.
При выборе minSdkVersion
следует учитывать следующие соображения:
Выбор низкого значения
minSdkVersion
обычно обеспечивает более широкое распространение вашей библиотеки.Код библиотеки обычно не выполняется, если приложение не вызывает его явно. Приложение все равно может работать на версии Android, которая ниже, чем требуется зависимостью библиотеки — если библиотека не является существенной для основных функциональных возможностей приложения — выполняя проверки во время выполнения перед вызовом библиотеки. Поэтому установите
minSdkVersion
вашей библиотеки достаточно низким, чтобы ее можно было встроить в приложения и вызывать, когда это возможно, чтобы помочь охватить больше пользователей.Выбор большого значения
minSdkVersion
может помешать приложениям включить библиотеку.Объединение манифестов, представляющее собой этап в AGP, который объединяет файлы манифестов из приложения и его зависимостей, обеспечивает, чтобы ни одна из зависимостей не имела более высокого значения
minSdkVersion
, чем приложение.Выбор большого значения
minSdkVersion
может побудить разработчиков приложений отключить проверки безопасности слияния манифестов, что приведет к проблемам на более поздних этапах процесса сборки.Поскольку слияние манифестов не позволяет проектам приложений включать библиотеки с более высоким значением
minSdkVersion
, чем само приложение, разработчики приложений могут отключить проверки безопасности слияния манифестов, чтобы минимизировать ошибки сборки. Однако это может привести к реальным проблемам несовместимости в дальнейшем.Выбор высокого значения
minSdkVersion
может потребоваться в особых случаях, когда манифест библиотеки включает широковещательный приемник или какой-либо другой механизм, с помощью которого ее код запускается автоматически.В этих случаях выбор высокого
minSdkVersion
гарантирует, что код может быть запущен. В качестве альтернативы вы можете отключить автоматическое поведение, чтобы приложение могло выбрать выполнение библиотеки после выполнения правильных проверок.
Чтобы разрешить встраивание в приложения, используйте аннотацию RequiresApi
в вашей библиотеке, чтобы указать вызывающим ее объектам, что им необходимо выполнять проверки во время выполнения. Android Lint использует информацию RequiresApi
для своих проверок. Дополнительные ресурсы по использованию аннотаций для улучшения кода API и API см. в разделе Улучшение проверки кода с помощью аннотаций .
Настройте метаданные AAR
Библиотека Android упакована в виде файла Android Archive (AAR). Метаданные AAR состоят из свойств, которые помогают AGP потреблять библиотеки. Если ваша библиотека потребляется несовместимой конфигурацией, а метаданные AAR настроены, пользователям будет показано сообщение об ошибке, чтобы помочь им решить проблему.
Выберите значение minCompileSdk
Начиная с версии 4.1, AGP поддерживает minCompileSdk
. Это указывает минимальный compileSdk
, который могут использовать потребляющие проекты. Если ваша библиотека содержит записи манифеста или ресурсы, которые используют более новые атрибуты платформы, вам необходимо установить это значение.
Значение minCompileSdk
можно задать в блоках defaultConfig{}
, productFlavors{}
и buildTypes{}
в файле build.gradle
уровня модуля:
Круто
android { defaultConfig { aarMetadata { minCompileSdk = 29 } } productFlavors { foo { ... aarMetadata { minCompileSdk = 30 } } } }
Котлин
android { defaultConfig { aarMetadata { minCompileSdk = 29 } } productFlavors { register("foo") { ... aarMetadata { minCompileSdk = 30 } } } }
Если вы зададите minCompileSdk
в нескольких местах, Gradle в процессе сборки расставит приоритеты расположения настроек следующим образом:
buildTypes{}
productFlavors{}
defaultConfig{}
В предыдущем примере, где minCompileSdk
определен как в defaultConfig{}
так и productFlavors{}
, productFlavors{}
имеет приоритет, а minCompileSdk
установлен на 30.
Чтобы узнать больше о том, как Gradle определяет приоритеты настроек при объединении кода и ресурсов, см. раздел Сборка с исходными наборами .
Включить тестовые приспособления
Тестовые приспособления обычно используются для настройки тестируемого кода или облегчения тестирования компонента. Начиная с версии 7.1, AGP может создавать тестовые приспособления для библиотечных проектов в дополнение к проектам приложений и динамических функций.
При публикации библиотеки для других пользователей рассмотрите возможность создания тестовых фикстур для вашего API. Тестовые фикстуры можно включить в файле build.gradle
на уровне модуля:
Круто
android { testFixtures { enable = true } }
Котлин
android { testFixtures { enable = true } }
При включении тестовых фикстур Gradle автоматически создает исходный набор src/testFixtures
в котором вы можете писать тестовые фикстуры.
Более подробную информацию см. в документации Gradle об использовании тестовых приспособлений .