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>

Aus einem AAR importierte Abhängigkeiten werden in CMake über CMAKE_FIND_ROOT_PATH Dieser Wert wird automatisch von Gradle festgelegt, wenn CMake wird aufgerufen. Wenn Ihr Build diese Variable ändert, müssen Sie also anstatt ihr zuzuweisen.

Durch jede Abhängigkeit wird ein config-file-Paket für Ihren Build verfügbar gemacht. Dies sind mit dem Befehl find_package importiert. Dieser Befehl sucht nach „config-file“ Pakete, die dem angegebenen Paketnamen und der angegebenen Version entsprechen, und die entsprechenden Ziele verfügbar machen definiert, was in Ihrem Build verwendet werden soll. Wenn in Ihrer App beispielsweise libapp.so und cURL verwendet wird, 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 #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.