Le librerie AAR possono contenere dipendenze native che il plug-in Android Gradle può consumare. AGP è anche in grado di produrre AAR che espongono le librerie native ai consumatori.
Utilizzo delle dipendenze native
A partire dal plug-in Android Gradle 4.0, è possibile importare le dipendenze C/C++
AAR collegati nel tuo file build.gradle
. Gradle le renderà automaticamente
disponibile per il sistema di compilazione nativo, ma quest'ultimo deve essere configurato
per utilizzare le librerie e le intestazioni importate. Poiché le dipendenze C/C++ vengono
distribuiti come rivenditori automatici, i seguenti link relativi ai rivenditori autorizzati possono essere utili:
- Creazione di una libreria Android per la documentazione AAR generica e come integrarle nel tuo progetto, soprattutto quando vuoi utilizzare AAR come dipendenza locale C/C++.
- Aggiungi dipendenze di build per informazioni su come aggiungere dipendenze al file
build.gradle
. in particolare per le dipendenze remote.
Questo documento spiega come configurare il tuo sistema di compilazione nativo e presuppone che tu abbia già È stato aggiunto un AAR della dipendenza C/C++ nell'ambiente di build Gradle del tuo progetto.
Dipendenze native negli AAR
Le dipendenze AAR dei moduli Gradle possono esporre le librerie native all'utilizzo
la tua applicazione. All'interno dell'AAR, la directory prefab
contiene un file Prefab
che include le intestazioni e le librerie della dipendenza nativa.
Ogni dipendenza può esporre al massimo un pacchetto Prefab, che comprende uno o più moduli. Un modulo Prefab è una singola libreria, che può essere una una libreria condivisa, statica o con solo intestazioni.
I nomi dei pacchetti e dei moduli devono essere noti per poter utilizzare le librerie. Di convenzione: il nome del pacchetto corrisponderà al nome dell'artefatto Maven e al modulo corrisponderà al nome della libreria C/C++, ma non è obbligatorio. Consulta il documentazione delle dipendenze per determinare i nomi utilizzati.
Configurazione di sistema di compilazione
La funzionalità prefab
deve essere abilitata per il modulo Android Gradle.
Per farlo, aggiungi quanto segue al blocco android
del modulo
build.gradle
file:
Kotlin
buildFeatures { prefab = true }
Alla moda
buildFeatures { prefab true }
Se vuoi, configura una versione
nel file gradle.properties
del tuo progetto:
android.prefabVersion=2.0.0
In genere, la versione predefinita di AGP selezionata è adatta alle tue esigenze. Dovresti soltanto selezionare una versione diversa se c'è un bug da risolvere o la nuova funzionalità desiderata.
Le dipendenze importate da un AAR sono esposte a CMake tramite CMake_FIND_ROOT_PATH. Questo valore verrà impostato automaticamente da Gradle quando CMake è richiamato, quindi se la tua build modifica questa variabile assicurati di aggiungere piuttosto che assegnarle.
Ogni dipendenza espone un pacchetto-file di configurazione alla tua build. Si tratta di
importati con il comando find_package. Questo comando cerca il file di configurazione
pacchetti che corrispondono al nome e alla versione del pacchetto specificati e ne mostrano le destinazioni
da utilizzare nella build. Ad esempio, se la tua applicazione definisce
libapp.so
e utilizza cURL, CMakeLists.txt
deve includere quanto segue:
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
app.cpp
ora può #include "curl/curl.h"
, libapp.so
lo sarà
viene collegato automaticamente a libcurl.so
durante la creazione e libcurl.so
essere inclusi nell'app.
Pubblicare librerie native nei rivenditori autorizzati
La possibilità di creare AAR nativi è stata aggiunta per la prima volta in AGP 4.1.
Per esportare le tue librerie native, aggiungi quanto segue al blocco android
di
il file build.gradle.kts
del tuo progetto biblioteca:
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
Alla moda
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
In questo esempio, le librerie mylibrary
e myotherlibrary
del tuo
La build nativa esterna ndk-build o CMake sarà pacchettizzata nel file AAR generato
della build e ognuna esporterà le intestazioni dalla directory specificata
i loro dipendenti.