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

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

Значение параметра 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 по использованию тестовых наборов данных .