Konfigurieren Sie ein Projekt für die Verwendung der Android Game Development Extension.
Die Android Game Development Extension ruft MSBuild auf, um C/C++-Quellcode in freigegebenen Bibliotheken (.so
) und statischen Bibliotheken (.a
) zu erstellen. Im Rahmen des Build-Prozesses ruft eine benutzerdefinierte MSBuild-Aufgabe Gradle auf, um Java- und Kotlin-Quellcode zu kompilieren, Assets zu verpacken und eine APK-Datei für die Bereitstellung zu generieren. Wenn Sie Ihr Projekt konfigurieren, müssen Sie dafür sorgen, dass MSBuild die Informationen hat, die für den Build für die Android-Plattform erforderlich sind.
C/C++ mit MSBuild erstellen
Ein typisches Android-Projekt wird mit Gradle erstellt. Dabei wird der native Code im Projekt durch einen Gradle-Durchlauf erstellt, bei dem entweder CMake oder ndk-build ausgeführt wird. Mit der Android Game Development Extension für Visual Studio ist der Build-Prozess umgekehrt. Jetzt ist MSBuild der Ausgangspunkt des Build-Prozesses. Der gesamte C/C++-Quellcode wird zuerst von MSBuild für die neuen Android-Plattformen erstellt, die im Rahmen der Erweiterung auf Ihrem System installiert sind (z. B. „Android-x86_64“). MSBuild ruft dann Gradle auf, um die freigegebenen Bibliotheksdateien, die Ihre C/C++-Logik enthalten, in einem APK zu verpacken.
Sie sollten zuerst die vorhandene Buildlogik Ihres Projekts in CMake oder ndk-build in MSBuild replizieren. Legen Sie die folgenden Zielplattformen fest:
- Android-x86
- Android-x86_64
- Android-armeabi-v7a
- Android-arm64-v8a
Diese Plattformen werden alle von der Android Game Development Extension bereitgestellt.
Kompilierungs- und Verknüpfungsoptionen festlegen
AGDE verwendet das von Ihnen ausgewählte NDK, um die Standard-Kompilierungs- und Verknüpfungsoptionen beim Erstellen des C/C++-Teils Ihrer App zu bestimmen.
Wenn Sie diese Kompilierungs- oder Verknüpfungsoptionen anpassen möchten, können Sie sie über die Projekteigenschaften festlegen. Die gängigsten Optionen finden Sie in den Gruppen „C/C++“ (für die Kompilierung), „Librarian“ (für das Archivieren statischer Bibliotheken) und „Linker“ (für die Verknüpfung dynamischer Bibliotheken). Wenn Sie weitere benutzerdefinierte Optionen übergeben möchten, können Sie sie im Bereich „Befehlszeile“ hinzufügen. Wenn Sie beispielsweise ein NDK verwenden, das älter als r28 ist, sollten Sie das Linker-Flag so festlegen, dass Ihre App 16-KB-Seitengrößen unterstützt.
Android-Plattform hinzufügen
Das Beispielprojekt „Teapot“ enthält Android-Plattformen, aber Sie müssen einem vorhandenen Projekt manuell eine Android-Plattform hinzufügen. So fügen Sie in Visual Studio eine neue Plattform hinzu:
- Wählen Sie Build > Configuration Manager aus.
- Wählen Sie unter Aktive Lösungsplattform die Option <Neu> aus.
Geben Sie einen der folgenden Werte für die neue Plattform ein:
- Android-armeabi-v7a
- Android-arm64-v8a
- Android-x86
- Android-x86_64
Wählen Sie im Feld Einstellungen von eine andere vorhandene Android-Plattform aus oder <Leeres Feld>, wenn Sie noch keine Android-Plattformen haben. Achten Sie darauf, dass Neue Projektplattformen erstellen aktiviert ist.
Android-APK-Element hinzufügen
Wählen Sie Hinzufügen > Neues Element > Visual C++ > Android > Android-APK aus und klicken Sie auf Hinzufügen. Konfigurieren Sie die Android-Anwendung im folgenden Dialogfeld.
- Anwendungsname: Der für Menschen lesbare Name Ihrer Android-Anwendung.
- App-ID: Die eindeutige Kennung für Ihre Android-App.
- Speicherort im Projektmappen-Explorer: Speicherort des virtuellen Ordners, der die hinzugefügten Unterstützungsdateien für die Android-Verpackung enthält. Standardmäßig befinden sich diese Dateien auch im Projekt in einem Ordner mit demselben Namen. Sie können den Speicherort anpassen, indem Sie das Kästchen Supportdateien an einem benutzerdefinierten Speicherort ablegen aktivieren und einen benutzerdefinierten Speicherort angeben. Der virtuelle Ordner befindet sich weiterhin im Solution Explorer unter dem aktuellen Projekt.
MSBuild Gradle zum Erstellen eines APKs aufrufen lassen
MSBuild kann Gradle nur aufrufen, wenn der Speicherort des Gradle-Projekts bekannt ist. Legen Sie diesen Speicherort mit dem Attribut Gradle Build Directory fest, wie in Abbildung 1 dargestellt.
Abbildung 1. Gradle-Build-Verzeichnis
Legen Sie außerdem die Eigenschaften Application Module, Application Variant und APK Name fest (wie im vorherigen Bild gezeigt), damit MSBuild weiß, was erstellt werden soll.
- Application Module (Anwendungsmodul): Der Name des Gradle-Unterprojekts. Das ist das Hauptprojekt, das in der
settings.gradle
-Datei festgelegt ist. Bei Projekten, die direkt mit Android Studio erstellt wurden, wird sie normalerweiseapp
genannt. - Anwendungsvariante: Die zu erstellende Android-Variante. Dieser Wert sollte gemäß den MSBuild-Konfigurationen festgelegt werden. Für einen Debug-Build sollte beispielsweise ein Wert für die Debug-Variante festgelegt sein. Wenn der Name der MSBuild-Konfiguration Ihres Projekts mit den Namen der Gradle-Varianten übereinstimmt, verwenden Sie einfach den Standardwert
$(Configuration)
. - APK-Name: Der Name der generierten APK-Datei, die für das Debuggen und Profiling auf Ihrem Entwicklungscomputer verwendet wird. Dieser Name wird an Gradle übergeben und sollte in Ihrem Gradle-Build-Script berücksichtigt werden (siehe Property
MSBUILD_ANDROID_OUTPUT_APK_NAME
im folgenden Abschnitt).
Gradle-Build-Scripts ändern
Während des Builds übergibt MSBuild die folgenden Informationen als Projekteigenschaften an das Gradle-Script. Ändern Sie die vorhandenen Build-Scripts Ihres Projekts (normalerweise build.gradle
), damit diese Eigenschaften gelesen werden.
MSBUILD_MIN_SDK_VERSION
: Die Mindest-SDK-Version zum Erstellen des APK. Legen Sie diesen Wert im Feld Mindest-Android-SDK-Version auf der Seite der Projekteigenschaft fest (siehe Abbildung 2).
Abbildung 2 Eigenschaft Minimum Android SDK VersionIm Gradle-Build-Script sollte
minSdkVersion
auf diesen Wert gesetzt werden, wie unten dargestellt.Groovy
android { // ... defaultConfig { applicationId "com.yourcompany.yourapp" minSdkVersion MSBUILD_MIN_SDK_VERSION // ... } // ... }
Kotlin
android { // ... defaultConfig { applicationId = "com.yourcompany.yourapp" minSdkVersion(MSBUILD_MIN_SDK_VERSION) // ... } // ... }
MSBUILD_ANDROID_OUTPUT_APK_NAME
: Der erwartete Name der APK, die von Gradle erstellt wird. Die Android Game Development Extension sucht nach einem APK mit diesem Namen und implementiert es dann auf verbundenen Geräten (zum Debuggen und Profilieren). Legen Sie diesen Wert im Feld APK-Name auf der Seite mit den Projekteigenschaften fest (siehe Abbildung 3).
Abbildung 3. Property APK-NameDas Gradle-Build-Script muss diese Eigenschaft berücksichtigen. Im folgenden Beispiel wird beispielsweise der Name des Ausgabe-APK für alle Varianten auf den von MSBuild ausgewählten Namen festgelegt.
Groovy
android { // ... applicationVariants.all { variant -> variant.outputs.all { outputFileName = MSBUILD_ANDROID_OUTPUT_APK_NAME } } // ... }
Kotlin
android { // ... applicationVariants.all { variant -> variant.outputs.all { outputFileName = MSBUILD_ANDROID_OUTPUT_APK_NAME } } // ... }
MSBUILD_JNI_LIBS_SRC_DIR
: Das Verzeichnis mit den von MSBuild erstellten freigegebenen Bibliotheken (.so
-Dateien). Legen Sie diesen Wert im Feld Ausgabeverzeichnis auf der Seite mit den Projekteigenschaften fest (siehe unten). Standardmäßig ist dies die Eigenschaft „Ausgabeverzeichnis“ für das Visual Studio-Projekt, wie in Abbildung 4 dargestellt.
Abbildung 4: Output Directory-EigenschaftGradle sollte die Dateien der freigegebenen Bibliothek in diesem Ordner im APK verpacken, damit die Android-Anwendung sie zur Laufzeit laden kann.
Groovy
android { // ... sourceSets { main { jniLibs.srcDirs += [MSBUILD_JNI_LIBS_SRC_DIR] } } // ... }
Kotlin
android { // ... sourceSets.getByName("main") { jniLibs.srcDir(MSBUILD_JNI_LIBS_SRC_DIR) } // ... }
Da C/C++-Code jetzt von MSBuild erstellt wird, entfernen Sie außerdem die
externalNativeBuild
-Abschnitte aus Ihren Gradle-Build-Scripts. Diese Abschnitte wurden verwendet, um CMake oder ndk-build zum Kompilieren Ihres C/C++-Codes aufzurufen. Sie sind jedoch nicht mehr erforderlich.MSBUILD_NDK_VERSION
: Die Version des NDK, die zum Erstellen Ihres Projekts verwendet werden soll. Legen Sie diesen Wert im Feld Android NDK Version auf der Seite „Project Properties“ (Projekteigenschaften) fest (siehe Abbildung 5).
Abbildung 5. Android NDK-VersionIm Gradle-Build-Script sollte
ndkVersion
auf diesen Wert festgelegt werden, wie hier gezeigt:Groovy
android { // ... ndkVersion MSBUILD_NDK_VERSION // ... }
Kotlin
android { // ... ndkVersion = MSBUILD_NDK_VERSION // ... }
Weitere Informationen finden Sie im Android Studio-Artikel NDK und CMake installieren und konfigurieren.