Подготовьте свою библиотеку к выпуску

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

  1. buildTypes{}

  2. productFlavors{}

  3. 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.