Natywne zależności z wtyczką Androida do obsługi Gradle

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.