Собственные зависимости с плагином Android Gradle

Библиотеки AAR могут содержать собственные зависимости, которые может использовать плагин Android Gradle. AGP также способна создавать файлы AAR, которые предоставляют потребителям собственные библиотеки.

Использование собственных зависимостей

Начиная с плагина Android Gradle 4.0, зависимости C/C++ можно импортировать из AAR, связанных с вашим файлом build.gradle . Gradle автоматически сделает их доступными для собственной системы сборки, но ваша система сборки должна быть настроена на использование импортированных библиотек и заголовков. Поскольку зависимости C/C++ распространяются как AAR, могут оказаться полезными следующие ссылки на общие AAR:

  • Создание библиотеки Android для общей документации AAR и способы ее интеграции в ваш проект, особенно если вы хотите использовать AAR в качестве локальной зависимости C/C++.
  • Добавьте зависимости сборки для получения информации о добавлении зависимостей в файл build.gradle , особенно для удаленных зависимостей.

В этом документе основное внимание уделяется настройке вашей собственной системы сборки, и предполагается, что вы уже добавили AAR зависимостей C/C++ в среду сборки Gradle вашего проекта.

Собственные зависимости в AAR

Зависимости AAR ваших модулей Gradle могут предоставлять собственные библиотеки для использования вашим приложением. Внутри AAR каталог prefab содержит пакет Prefab , который включает заголовки и библиотеки собственной зависимости.

Каждая зависимость может предоставлять не более одного пакета Prefab, который включает один или несколько модулей. Модуль Prefab — это отдельная библиотека, которая может быть общей, статической или библиотекой только заголовков.

Для использования библиотек необходимо знать имена пакетов и модулей. По соглашению имя пакета будет соответствовать имени артефакта Maven, а имя модуля будет соответствовать имени библиотеки C/C++, но это не обязательно. Обратитесь к документации зависимости, чтобы определить, какие имена она использует.

Конфигурация системы сборки

Функция prefab должна быть включена для вашего модуля Android Gradle.

Для этого добавьте следующее в блок android файла build.gradle вашего модуля:

Котлин

buildFeatures {
  prefab = true
}

классный

buildFeatures {
  prefab true
}

При желании настройте версию в файле gradle.properties вашего проекта:

android.prefabVersion=2.0.0

Обычно выбранная по умолчанию версия AGP соответствует вашим потребностям. Вам нужно будет выбрать другую версию только в том случае, если есть ошибка, которую нужно исправить, или если вам нужна новая функция.

Зависимости, импортированные из AAR, доступны CMake через CMAKE_FIND_ROOT_PATH . Это значение будет автоматически установлено Gradle при вызове CMake, поэтому, если ваша сборка изменяет эту переменную, обязательно добавляйте ее, а не присваивайте ей.

Каждая зависимость предоставляет пакет конфигурационного файла для вашей сборки. Они импортируются с помощью команды find_package . Эта команда ищет пакеты конфигурационных файлов, соответствующие заданному имени и версии пакета, и предоставляет определенные ею цели для использования в вашей сборке. Например, если ваше приложение определяет libapp.so и использует cURL, ваш CMakeLists.txt должен включать следующее:

add_library(app SHARED app.cpp)

# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)

app.cpp теперь может #include "curl/curl.h" , libapp.so будет автоматически связан с libcurl.so при сборке, а libcurl.so будет включен в приложение.

Публикация собственных библиотек в AAR

Возможность создания собственных AAR была впервые добавлена ​​в AGP 4.1.

Чтобы экспортировать собственные библиотеки, добавьте следующее в блок android файла build.gradle.kts вашего проекта библиотеки:

Котлин

buildFeatures {
    prefabPublishing = true
}

prefab {
    create("mylibrary") {
      headers = "src/main/cpp/mylibrary/include"
    }

    create("myotherlibrary") {
        headers = "src/main/cpp/myotherlibrary/include"
    }
}

классный

buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

В этом примере библиотеки mylibrary и myotherlibrary из вашей внешней собственной сборки ndk-build или CMake будут упакованы в AAR, созданный вашей сборкой, и каждая из них будет экспортировать заголовки из указанного каталога в свои зависимые объекты.