Native Abhängigkeiten mit dem Android-Gradle-Plug-in

AAR-Bibliotheken können native Abhängigkeiten enthalten, die vom Android-Gradle-Plug-in genutzt werden können. AGP ist außerdem in der Lage, AAE zu erstellen, die ihren Nutzern native Bibliotheken zur Verfügung stellen.

Native Abhängigkeiten verwenden

Ab dem Android-Gradle-Plug-in 4.0 können C/C++-Abhängigkeiten aus AARs importiert werden, die in der Datei build.gradle verknüpft sind. Gradle stellt diese automatisch für das native Build-System zur Verfügung. Ihr Build-System muss jedoch so konfiguriert sein, dass die importierten Bibliotheken und Header verwendet werden. Da C/C++-Abhängigkeiten als AAE verteilt sind, können die folgenden Links zu generischen AAE hilfreich sein:

  • Eine Android-Bibliothek erstellen für allgemeine AAR-Dokumentation und deren Integration in Ihr Projekt, insbesondere wenn Sie AAR als lokale C/C++-Abhängigkeit verwenden möchten.
  • Fügen Sie Build-Abhängigkeiten hinzu, um Informationen zum Hinzufügen von Abhängigkeiten zur Datei build.gradle zu erhalten, insbesondere für die Remote-Abhängigkeiten.

In diesem Dokument wird beschrieben, wie Sie Ihr natives Build-System konfigurieren. Es wird davon ausgegangen, dass Sie der Gradle-Build-Umgebung Ihres Projekts bereits eine AAE aus C/C++-Abhängigkeit hinzugefügt haben.

Native Abhängigkeiten in automatisch angewendeten Empfehlungen

AAR-Abhängigkeiten Ihrer Gradle-Module können native Bibliotheken zur Verwendung durch Ihre Anwendung verfügbar machen. Innerhalb des AAR enthält das Verzeichnis prefab ein Prefab-Paket mit den Headern und Bibliotheken der nativen Abhängigkeit.

Jede Abhängigkeit kann maximal ein Fertigpaket bereitstellen, das ein oder mehrere Module umfasst. Ein Prefab-Modul ist eine einzelne Bibliothek, die entweder eine gemeinsam genutzte, statische oder nur Header-Bibliothek sein kann.

Die Paket- und Modulnamen müssen bekannt sein, damit die Bibliotheken genutzt werden können. Konventionsgemäß entspricht der Paketname dem Namen des Maven-Artefakts und der Modulname dem C/C++-Bibliotheksnamen. Dies ist jedoch nicht erforderlich. Welche Namen verwendet werden, können Sie der Dokumentation der Abhängigkeit entnehmen.

Build-Systemkonfiguration

Das Feature prefab muss für dein Android-Gradle-Modul aktiviert sein.

Fügen Sie dazu in den android-Block der build.gradle-Datei Ihres Moduls Folgendes ein:

Kotlin

buildFeatures {
  prefab = true
}

Groovig

buildFeatures {
  prefab true
}

Konfigurieren Sie optional eine Version in der Datei gradle.properties Ihres Projekts:

android.prefabVersion=2.0.0

In der Regel wird die AGP-Standardversion Ihren Anforderungen gerecht. Sie sollten nur dann eine andere Version auswählen, wenn es einen Fehler gibt, den Sie umgehen müssen, oder wenn Sie eine neue Funktion wünschen.

Aus einem AAR importierte Abhängigkeiten werden in CMake über CMake_FIND_ROOT_PATH freigegeben. Dieser Wert wird von Gradle automatisch festgelegt, wenn CMake aufgerufen wird. Wenn Ihr Build diese Variable ändert, muss sie also angehängt und nicht zugewiesen werden.

Jede Abhängigkeit stellt ein config-file-Paket für Ihren Build zur Verfügung. Diese werden mit dem Befehl find_package importiert. Dieser Befehl sucht nach Konfigurationsdateipaketen, die dem angegebenen Paketnamen und der angegebenen Paketversion entsprechen, und macht die für den Build zu verwendenden Ziele verfügbar. Wenn Ihre Anwendung beispielsweise libapp.so definiert und cURL verwendet, sollte CMakeLists.txt Folgendes enthalten:

add_library(app SHARED app.cpp)

# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)

app.cpp kann jetzt auf #include "curl/curl.h" zugreifen, libapp.so wird beim Erstellen automatisch mit libcurl.so verknüpft und libcurl.so wird in die App aufgenommen.

Native Bibliotheken in AAE veröffentlichen

Die Möglichkeit zum Erstellen nativer automatisch angewendeter Empfehlungen wurde erstmals mit AGP 4.1 eingeführt.

Zum Exportieren Ihrer nativen Bibliotheken fügen Sie dem android-Block der build.gradle.kts-Datei Ihres Bibliotheksprojekts Folgendes hinzu:

Kotlin


buildFeatures {
    prefabPublishing = true
}

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

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

Groovig


buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    myotherlibrary {
        headers "src/main/cpp/myotherlibrary/include"
    }
}

In diesem Beispiel werden die mylibrary- und myotherlibrary-Bibliotheken aus dem externen nativen Build ndk-build oder CMake in das von Ihrem Build erstellte AAR verpackt. Jede dieser Bibliotheken exportiert die Header aus dem angegebenen Verzeichnis in ihre abhängigen Elemente.