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ć.

.

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.