Biblioteki AAR mogą zawierać zależności natywne, które mogą być używane przez wtyczkę Androida do obsługi Gradle. AGP może też generować pliki AAR, które udostępniają biblioteki natywne swoim konsumentom.
Korzystanie z zależności natywnych
Od wersji 4.0 wtyczki Androida do obsługi Gradle zależności C/C++ można importować z plików AAR połączonych w pliku build.gradle. Gradle automatycznie udostępni je natywnemu systemowi kompilacji, ale musisz go skonfigurować, aby korzystał z zaimportowanych bibliotek i nagłówków. Zależności C/C++ są rozpowszechniane jako pliki AAR, dlatego mogą Ci się przydać te linki dotyczące ogólnych plików AAR:
- Tworzenie biblioteki Androida – ogólna dokumentacja dotycząca plików AAR i sposobu ich integracji z projektem, zwłaszcza gdy chcesz używać pliku AAR jako lokalnej zależności C/C++.
- Dodawanie zależności kompilacji, aby dowiedzieć się, jak dodawać zależności do pliku
build.gradle, zwłaszcza w przypadku zależności zdalnych.
W tym dokumencie skupiamy się na konfigurowaniu natywnego systemu kompilacji i zakładamy, że do środowiska kompilacji Gradle projektu dodano już zależność C/C++ w formacie AAR.
Zależności natywne w plikach AAR
Zależności AAR modułów Gradle mogą udostępniać biblioteki natywne do użycia przez aplikację. W pliku AAR katalog prefab zawiera pakiet Prefab, który obejmuje nagłówki i biblioteki zależności natywnej.
Każda zależność może udostępniać maksymalnie 1 pakiet Prefab, który składa się z co najmniej 1 modułu. Moduł Prefab to pojedyncza biblioteka, która może być biblioteką udostępnioną, statyczną lub zawierającą tylko nagłówki.
Aby korzystać z bibliotek, musisz znać nazwy pakietów i modułów. Zgodnie z konwencją nazwa pakietu będzie odpowiadać nazwie artefaktu Maven, a nazwa modułu będzie odpowiadać nazwie biblioteki C/C++, ale nie jest to wymagane. Aby dowiedzieć się, jakich nazw używa, zapoznaj się z dokumentacją zależności.
Konfiguracja systemu kompilacji
Funkcja prefab musi być włączona w module Androida do obsługi Gradle.
Aby to zrobić, dodaj do bloku android w pliku build.gradle modułu te informacje:
Kotlin
buildFeatures { prefab = true }
Dynamiczny
buildFeatures { prefab true }
Opcjonalnie możesz skonfigurować wersję w pliku gradle.properties projektu:
android.prefabVersion=2.0.0
Zwykle domyślna wersja AGP będzie odpowiadać Twoim potrzebom. Inną wersję należy wybrać tylko wtedy, gdy chcesz obejść błąd lub skorzystać z nowej funkcji.
Zależności zaimportowane z pliku AAR są udostępniane CMake za pomocą CMAKE_FIND_ROOT_PATH. Ta wartość zostanie ustawiona automatycznie przez Gradle po wywołaniu CMake, więc jeśli kompilacja modyfikuje tę zmienną, pamiętaj, aby ją dołączyć, a nie przypisać.
Każda zależność udostępnia kompilacji pakiet plików konfiguracji. Są one importowane za pomocą polecenia find_package. To polecenie wyszukuje pakiety config-file pasujące do podanej nazwy i wersji pakietu oraz udostępnia zdefiniowane w nich cele do użycia w kompilacji. Jeśli na przykład aplikacja definiuje libapp.so i używa curl, CMakeLists.txt powinien zawierać te informacje:
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 automatycznie połączony z libcurl.so podczas kompilacji, a libcurl.so będzie dołączony do aplikacji.
Publikowanie bibliotek natywnych w plikach AAR
Możliwość tworzenia natywnych plików AAR została po raz pierwszy dodana we wtyczce Androida do obsługi Gradle 4.1.
Aby wyeksportować biblioteki natywne, dodaj do bloku android w pliku build.gradle.kts projektu biblioteki ten kod:
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
Dynamiczny
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 zewnętrznej kompilacji natywnej ndk-build lub CMake zostaną spakowane w pliku AAR utworzonym przez kompilację, a każda z nich wyeksportuje nagłówki z określonego katalogu do zależnych od nich elementów.