Dipendenze native con il plug-in Android per Gradle

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.