На этой странице описаны свойства и параметры, необходимые для подготовки проекта библиотеки 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 (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.