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ć.
Każda zależność udostępnia plik Android.mk Twojej kompilacji. Są to
zaimportowany za pomocą polecenia import-module. To polecenie wyszukuje Android.mk
pliki o podanej ścieżce w katalogach importu kompilacji (zgodnie z konfiguracją
przez import-add-path) i udostępnia zdefiniowane przez nie moduły do użycia
tworzyć. Jeśli na przykład Twoja aplikacja definiuje libapp.so i używa cURL,
plik Android.mk powinien zawierać:
include $(CLEAR_VARS)
LOCAL_MODULE := libapp
LOCAL_SRC_FILES := app.cpp
LOCAL_SHARED_LIBRARIES := curl
include $(BUILD_SHARED_LIBRARY)
# If you don't need your project to build with NDKs older than r21, you can omit
# this block.
ifneq ($(call ndk-major-at-least,21),true)
$(call import-add-path,$(NDK_GRADLE_INJECTED_IMPORT_PATH))
endif
$(call import-module,prefab/curl)
Pamiętaj, że jawny import-add-path jest wymagany tylko wtedy, gdy używasz NDK przed
do r21. Od 21 r. NDK_GRADLE_INJECTED_IMPORT_PATH automatycznie
dodany do ścieżek importu.
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.