Biblioteki AAR mogą zawierać natywne zależności, które może konsumpcji. AGP jest w stanie tworzyć pakiety AAR, które udostępniają biblioteki natywne swoim konsumentom.
Korzystanie z zależności natywnych
Od wtyczki Androida do obsługi Gradle w wersji 4.0 zależności C/C++ można importować z
AAR połączone w pliku build.gradle
. Gradle automatycznie
dostępne dla natywnego systemu kompilacji, ale musisz go skonfigurować
aby korzystać z zaimportowanych bibliotek i nagłówków. Ponieważ zależności C/C++
rozpowszechnianych jako AAR, przydatne mogą być te linki:
- Utworzenie biblioteki Androida na potrzeby ogólnej dokumentacji AAR oraz jak zintegrować go z projektem, zwłaszcza jeśli chcesz użyj AAR jako lokalnej zależności C/C++.
- Dodaj zależności kompilacji, aby dowiedzieć się więcej o dodawaniu zależności do pliku
build.gradle
. zwłaszcza w przypadku zależności zdalnych.
Ten dokument skupia się na konfigurowaniu natywnego systemu kompilacji i zakładamy, że masz już za sobą dodano AAR zależności C/C++ do środowiska kompilacji Gradle projektu.
Zależności natywne w AAR
Zależności AAR modułów Gradle mogą udostępnić biblioteki natywne do użycia przez
Twojej aplikacji. W AAR w katalogu prefab
znajduje się Prefab
pakiet zawierający nagłówki i biblioteki zależności natywnej.
Każda zależność może ujawniać maksymalnie 1 pakiet Prefab, który składa się z jednego lub modułach. Moduł Prefab to jedna biblioteka, która może być udostępniane, statyczne lub tylko nagłówkowe.
Aby można było korzystać z bibliotek, nazwy pakietów i modułów muszą być znane. Według zgodnie z konwencją, nazwa pakietu będzie pasowała do nazwy artefaktu Maven i modułu nazwa będzie zgodna z nazwą biblioteki C/C++, ale nie jest to wymagane. Skonsultuj się z w dokumentacji zależności.
Konfiguracja systemu kompilacji
W module Gradle Androida musisz włączyć funkcję prefab
.
Aby to zrobić, do bloku android
w module
Plik build.gradle
:
Kotlin
buildFeatures { prefab = true }
Odlotowe
buildFeatures { prefab true }
Opcjonalnie skonfiguruj wersję
w pliku gradle.properties
projektu:
android.prefabVersion=2.0.0
Zwykle do Twoich potrzeb odpowiada wybrana domyślna wersja AGP. Należy tylko musisz wybrać inną wersję, jeśli występuje błąd, który musisz naprawić, lub z których chcesz korzystać.
Zależności zaimportowane z AAR są udostępniane do CMake przez Cmake_FIND_ROOT_PATH, Ta wartość zostanie ustawiona automatycznie przez Gradle, gdy: Wywoływana jest właściwość CMake, więc jeśli kompilacja modyfikuje tę zmienną, musisz dodać zamiast je przypisywać.
Każda zależność ujawnia dla kompilacji pakiet pliku konfiguracji. Są to
zaimportowany za pomocą polecenia find_package. To polecenie wyszukuje plik config-file
pakiety pasujące do podanej nazwy i wersji pakietu oraz ujawniają cele,
do użycia w kompilacji. Jeśli na przykład aplikacja określa
libapp.so
i korzysta z cURL, CMakeLists.txt
powinien zawierać:
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
app.cpp
może teraz #include "curl/curl.h"
, libapp.so
będzie
jest automatycznie połączony z usługą libcurl.so
podczas tworzenia, a libcurl.so
być dostępne w aplikacji.
Publikowanie bibliotek natywnych w AAR
Możliwość tworzenia natywnych AAR została dodana w AGP 4.1.
Aby wyeksportować biblioteki natywne, dodaj ten kod do bloku android
sekcji
plik build.gradle.kts
Twojego projektu bibliotecznego w bibliotece:
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
Odlotowe
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
W tym przykładzie biblioteki mylibrary
i myotherlibrary
z Twoich
ndk-build lub CMake zewnętrzna kompilacja natywna zostanie spakowana w AAR wygenerowanym przez
w kompilacji i każdy z nich wyeksportuje nagłówki z określonego katalogu do
swoim podopiecznym.