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

Biblioteki AAR mogą zawierać natywne zależności, z których może korzystać wtyczka Androida do obsługi Gradle. AGP może też generować raporty AAR, które udostępniają biblioteki natywne użytkownikom.

Korzystanie z zależności natywnych

Od wtyczki Androida do obsługi Gradle w wersji 4.0 możesz importować zależności C/C++ z usług AAR, do których linki znajdują się w pliku build.gradle. Gradle automatycznie udostępni je w natywnym systemie kompilacji, ale musisz go skonfigurować tak, aby mógł korzystać z zaimportowanych bibliotek i nagłówków. Ponieważ zależności C/C++ są rozpowszechniane jako AAR, pomocne mogą się okazać te linki dotyczące ogólnych informacji o AR:

  • utworzyć bibliotekę Androida do ogólnej dokumentacji AAR i dowiedzieć się, jak zintegrować ją z projektem, zwłaszcza jeśli chcesz używać AAR jako lokalnej zależność w C/C++;
  • Dodaj zależności kompilacji, aby uzyskać informacje o dodawaniu zależności do pliku build.gradle, zwłaszcza w zakresie zależności zdalnych.

Ten dokument dotyczy sposobu konfigurowania natywnego systemu kompilacji i zakładamy, że masz już dodany AAR zależności C/C++ do środowiska kompilacji Gradle projektu.

Natywne zależności w AAR

Zależności AAR modułów Gradle mogą udostępnić biblioteki natywne do użycia przez aplikację. W AAR katalog prefab zawiera pakiet Prefab z nagłówkami i bibliotekami zależności natywnej.

Każda zależność może ujawniać maksymalnie 1 pakiet Prefab, który składa się z 1 lub większej liczby modułów. Moduł Prefab to pojedyncza biblioteka, która może być biblioteką współdzieloną, statyczną lub biblioteką tylko z nagłówkiem.

Aby można było korzystać z bibliotek, nazwy pakietów i modułów muszą być znane. Zgodnie z konwencją nazwa pakietu będzie zgodna z nazwą artefaktu Maven, a nazwa modułu będzie zgodna z nazwą biblioteki C/C++, ale nie jest to wymagane. Informacje o tym, jakie nazwy są używane, znajdziesz w dokumentacji zależności.

Utwórz konfigurację systemu

W module Androida Gradle musi być włączona funkcja prefab.

Aby to zrobić, dodaj ten fragment do bloku android w pliku build.gradle modułu:

Kotlin

buildFeatures {
  prefab = true
}

Odlotowy

buildFeatures {
  prefab true
}

Opcjonalnie skonfiguruj wersję w pliku gradle.properties projektu:

android.prefabVersion=2.0.0

Zwykle wybrana wersja domyślna aplikacji AGP będzie odpowiadać Twoim potrzebom. Różną wersję należy wybierać tylko wtedy, gdy występuje błąd, który trzeba naprawić, lub potrzebna jest nowa funkcja.

Zależności zaimportowane z AAR są udostępniane w CMake przez CCREATE_FIND_ROOT_PATH. Ta wartość jest ustawiana automatycznie przez Gradle po wywołaniu CMake, więc jeśli kompilacja modyfikuje tę zmienną, pamiętaj, aby ją dołączyć, a nie przypisać do niej.

Każda zależność ujawnia w Twojej kompilacji pakiet config-file. Są one importowane za pomocą polecenia find_package. To polecenie wyszukuje pakiety plików konfiguracyjnych pasujące do podanej nazwy i wersji pakietu oraz udostępnia zdefiniowane przez niego miejsca docelowe do użycia w kompilacji. Jeśli na przykład aplikacja definiuje właściwość libapp.so i używa ona cURL, CMakeLists.txt powinien zawierać ten kod:

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 mieć: #include "curl/curl.h", libapp.so będzie automatycznie połączony z libcurl.so podczas tworzenia, a libcurl.so zostanie uwzględniony w aplikacji.

Publikowanie bibliotek natywnych w AAR

Możliwość tworzenia natywnych AAR została po raz pierwszy dodana w AGP 4.1.

Aby wyeksportować biblioteki natywne, dodaj ten fragment do bloku android w pliku build.gradle.kts projektu biblioteki:

Kotlin


buildFeatures {
    prefabPublishing = true
}

prefab {
    create("mylibrary") {
      headers = "src/main/cpp/mylibrary/include"
    }

    create("myotherlibrary") {
        headers = "src/main/cpp/myotherlibrary/include"
    }
}

Odlotowy


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 CMake zostaną spakowane do pliku AAR utworzonego przez kompilację i każdy z nich wyeksportuje nagłówki ze wskazanego katalogu do swoich katalogów zależnych.