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

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

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