Библиотеки 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, созданный вашей сборкой, и каждая из них будет экспортировать заголовки из указанного каталога в свои зависимые объекты.