Как подготовить библиотеку к выпуску

На этой странице описаны свойства и параметры, необходимые для подготовки проекта библиотеки Android к публикации с помощью плагина Android Gradle (AGP). Даже если вы уже задали некоторые из этих свойств при создании библиотеки, ознакомьтесь с приведенными ниже рекомендациями по оптимизации настроек.

Выберите пространство имен

Библиотеки Android должны объявлять пространство имен, чтобы они могли генерировать уникальный класс R при компиляции ресурсов. Это пространство имен должно быть максимально близко к пакету корневого класса библиотеки, чтобы избежать путаницы, когда пользователи импортируют обычные классы из библиотеки и ее класс R.

Начиная с AGP 7.0, вы можете задать пространство имен в файле build.gradle приложения, как показано в примере кода ниже.

Яркий

android {
  namespace = 'com.example.library'
}

Kotlin

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 см. в разделе Улучшение проверки кода с помощью аннотаций.

Настройте метаданные автоматического применения рекомендаций

Библиотека 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
      }
    }
  }
}

Kotlin

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
  }
}

Kotlin

android {
  testFixtures {
    enable = true
  }
}

Когда вы включаете тестовые фикстуры, Gradle автоматически создает набор исходных файлов src/testFixtures, в котором вы можете писать тестовые фикстуры.

Дополнительную информацию можно найти в документации Gradle по использованию тестовых фикстур.