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

AAR-Bibliotheken können native Abhängigkeiten enthalten, die das Android-Gradle-Plug-in nutzen kann. verbrauchen. AGP kann auch AAE erstellen, die native Bibliotheken für ihre Kunden.

Native Abhängigkeiten verwenden

Ab Android-Gradle-Plug-in 4.0 können C/C++-Abhängigkeiten aus AAE sind in Ihrer build.gradle-Datei verknüpft. Gradle wird diese für das native Build-System verfügbar, aber das Build-System muss konfiguriert sein um die importierten Bibliotheken und Header zu nutzen. Da C/C++-Abhängigkeiten die als automatisch angewendete Empfehlungen vertrieben werden, könnten die folgenden Links zu allgemeinen automatisch angewendeten Empfehlungen hilfreich sein:

  • Erstellen einer Android-Bibliothek für die generische Dokumentation zu automatisch angewendeten Empfehlungen und wie Sie es in Ihr Projekt integrieren, AAR als lokale C/C++-Abhängigkeit verwenden.
  • Fügen Sie Build-Abhängigkeiten hinzu, um Informationen zum Hinzufügen von Abhängigkeiten zur Datei build.gradle zu erhalten. insbesondere bei Remote-Abhängigkeiten.

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

Native Abhängigkeiten in AAE

AAR-Abhängigkeiten Ihrer Gradle-Module können native Bibliotheken zur Verwendung durch Ihre Anwendung. Im AAE enthält das Verzeichnis prefab eine Prefab-Datei. -Paket, das die Header und Bibliotheken der nativen Abhängigkeit enthält.

Jede Abhängigkeit kann höchstens ein Prefab-Paket bereitstellen, das ein oder weitere Module. Ein Prefab-Modul ist eine einzelne Bibliothek, die entweder freigegebene, statische oder reine Header-Bibliothek.

Die Paket- und Modulnamen müssen bekannt sein, damit die Bibliotheken verwendet werden können. Von Konvention entspricht der Paketname dem Maven-Artefaktnamen und dem Modul Name mit dem Namen der C/C++-Bibliothek übereinstimmt, dies ist jedoch nicht erforderlich. Informationen hierzu finden Sie in der der Abhängigkeitsdokumentation, um zu ermitteln, welche Namen verwendet werden.

Systemkonfiguration erstellen

<ph type="x-smartling-placeholder"></ph>

Die Funktion prefab muss für das Android-Gradle-Modul aktiviert sein.

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

Kotlin

buildFeatures {
  prefab = true
}

Cool

buildFeatures {
  prefab true
}

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

android.prefabVersion=2.0.0

In der Regel entspricht die Standardversion AGP Ihren Anforderungen. Sie sollten nur eine andere Version auswählen, wenn Sie einen Fehler beheben müssen oder eine neue Funktion nach Ihren Vorstellungen.

<ph type="x-smartling-placeholder"></ph>

Durch jede Abhängigkeit wird eine Android.mk-Datei für Ihren Build verfügbar. Dies sind mit dem Befehl import-module importiert. Mit diesem Befehl wird nach Android.mk gesucht Dateien mit dem angegebenen Pfad in den Importverzeichnissen des Builds (wie konfiguriert von import-add-path) und stellt die Module bereit, die zur Verwendung in Ihrem erstellen. Wenn in Ihrer Anwendung beispielsweise libapp.so definiert und cURL verwendet wird, Ihre Android.mk-Datei sollte Folgendes enthalten:

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)

Beachten Sie, dass die explizite import-add-path nur erforderlich ist, wenn vor der Verwendung von NDKs vor an r21. Ab r21 wird NDK_GRADLE_INJECTED_IMPORT_PATH automatisch den Importpfaden hinzugefügt.

app.cpp kann jetzt #include "curl/curl.h", libapp.so ist dann beim Erstellen automatisch mit libcurl.so verknüpft und libcurl.so wird in die App eingebunden werden.

Native Bibliotheken in automatisch angewendeten Empfehlungen veröffentlichen

Die Möglichkeit, native automatisch angewendete Empfehlungen zu erstellen, wurde erstmals in AGP 4.1 hinzugefügt.

Fügen Sie zum Exportieren Ihrer nativen Bibliotheken Folgendes in den android-Block von in der Datei build.gradle.kts Ihres Bibliotheksprojekts:

Kotlin

buildFeatures {
    prefabPublishing = true
}

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

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

Cool

buildFeatures {
    prefabPublishing true
}

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

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

In diesem Beispiel haben die Bibliotheken mylibrary und myotherlibrary aus Ihrem Der externe native Build „ndk-build“ oder „CMake“ wird in das AAR gepackt, das von Ihr Build und jeder exportiert die Header aus dem angegebenen Verzeichnis nach für ihre abhängigen Rechtssubjekte.