Skonfiguruj projekt do korzystania z rozszerzenia Android Game Development Extension.
Rozszerzenie do tworzenia gier na Androida wywołuje MSBuild, aby skompilować kod źródłowy C/C++ w bibliotekach współdzielonych (.so
) i bibliotekach statycznych (.a
). W ramach procesu kompilacji niestandardowe zadanie MSBuild wywołuje Gradle, aby skompilować kod źródłowy w języku Java i Kotlin, skompilować zasoby i wygenerować plik APK na potrzeby wdrożenia. Podczas konfigurowania projektu musisz się upewnić, że MSBuild ma informacje potrzebne do kompilacji na platformę Android.
Kompilowanie kodu C/C++ za pomocą MSBuild
Typowy projekt Androida jest kompilowany za pomocą Gradle, a kod natywny w projekcie jest kompilowany przez Gradle, który uruchamia CMake lub ndk-build. W przypadku rozszerzenia Android Game Development Extension dla Visual Studio proces kompilacji jest odwrócony. Teraz MSBuild jest punktem wyjścia procesu kompilacji. Cały kod źródłowy C/C++ jest najpierw kompilowany przez MSBuild dla nowych platform Androida zainstalowanych w systemie jako część rozszerzenia (np. „Android-x86_64”). Następnie MSBuild wywołuje Gradle, aby skompilować pliki udostępnianych bibliotek, które zawierają logikę C/C++, do pliku APK.
Najpierw należy odtworzyć dotychczasową logikę kompilacji projektu w CMake lub ndk-build w MSBuild. Ustaw platformy docelowe:
- Android-x86
- Android-x86_64
- Android-armeabi-v7a
- Android-arm64-v8a
Wszystkie te platformy są obsługiwane przez rozszerzenie Android Game Development Extension.
Ustawianie opcji kompilacji i linkowania
AGDE używa wybranego przez Ciebie NDK, aby określić domyślne opcje kompilacji i linkowania podczas kompilowania części aplikacji napisanej w C/C++.
Jeśli chcesz dostosować te opcje kompilacji lub łączenia, możesz je ustawić w Właściwościach projektu. Najczęstsze opcje znajdziesz w grupach C/C++ (do kompilacji), Librarian (do archiwizacji biblioteki statycznej) i Linker (do łączenia biblioteki dynamicznej). Jeśli chcesz przekazać inne opcje niestandardowe, możesz je dodać w sekcji wiersza poleceń. Jeśli np. używasz NDK starszego niż r28, możesz ustawić flagę linkera, aby aplikacja obsługiwała strony o rozmiarze 16 KB.
Dodawanie platformy Android
Przykładowy projekt „Czajnik” zawiera platformy Android, ale do istniejącego projektu musisz ręcznie dodać platformę Android. Aby dodać nową platformę, wykonaj te czynności w Visual Studio:
- Kliknij Build > Configuration Manager (Buduj > Menedżer konfiguracji).
- W sekcji Aktywna platforma rozwiązań kliknij <Nowa>.
W przypadku nowej platformy wpisz jedną z tych opcji:
- Android-armeabi-v7a
- Android-arm64-v8a
- Android-x86
- Android-x86_64
W polu Kopiuj ustawienia z wybierz inną istniejącą platformę Android lub <Pusty>, jeśli nie masz jeszcze żadnych platform Android. Upewnij się, że masz włączoną opcję Tworzenie nowych platform projektów.
Dodawanie elementu pliku APK na Androida
Kliknij Dodaj > Nowy element > Visual C++ > Android > Android APK i kliknij Dodaj. Skonfiguruj aplikację na Androida w oknie, które się pojawi.
- Nazwa aplikacji: czytelna dla użytkownika nazwa aplikacji na Androida.
- Identyfikator aplikacji: unikalny identyfikator aplikacji na Androida.
- Lokalizacja Eksploratora rozwiązań: lokalizacja folderu wirtualnego zawierającego dodane pliki obsługi pakietów Androida. Domyślnie te pliki znajdują się też w projekcie w folderze o tej samej nazwie. Lokalizację możesz dostosować, zaznaczając pole wyboru Umieść pliki pomocy w niestandardowej lokalizacji i podając niestandardową lokalizację. Folder wirtualny będzie nadal widoczny w Eksploratorze rozwiązań w bieżącym projekcie.
Wywoływanie Gradle przez MSBuild w celu utworzenia pliku APK
MSBuild nie może wywołać Gradle, chyba że zna lokalizację projektu Gradle. Ustaw tę lokalizację za pomocą właściwości Katalog kompilacji Gradle, jak pokazano na rysunku 1.
Rysunek 1. Właściwość Katalog kompilacji Gradle
Ponadto ustaw właściwości Application Module (Moduł aplikacji), Application Variant (Wariant aplikacji) i APK Name (Nazwa pliku APK) (jak pokazano na poprzednim obrazie), aby MSBuild wiedział, co ma skompilować.
- Moduł aplikacji: nazwa podprojektu Gradle. Jest to główny projekt w pliku
settings.gradle
. Jest on zwykle nazywanyapp
w przypadku projektów utworzonych bezpośrednio w Android Studio. - Wariant aplikacji: wariant na Androida, który ma zostać utworzony. Wartość tę należy ustawić zgodnie z konfiguracjami MSBuild. Na przykład kompilacja debugowania powinna mieć wartość ustawioną na wariant debugowania. Jeśli nazwa konfiguracji MSBuild Twojego projektu jest zgodna z nazwami wariantów Gradle, użyj domyślnej wartości
$(Configuration)
. - Nazwa pliku APK: nazwa wygenerowanego pliku APK używanego do debugowania i profilowania na komputerze dewelopera. Ta nazwa jest przekazywana do Gradle, a skrypt kompilacji Gradle powinien ją uwzględniać (patrz właściwość
MSBUILD_ANDROID_OUTPUT_APK_NAME
w następnej sekcji).
Modyfikowanie skryptów kompilacji Gradle
Podczas kompilacji MSBuild przekazuje te informacje jako właściwości projektu do skryptu Gradle. Zmień dotychczasowe skrypty kompilacji projektu (zwykle o nazwie build.gradle
), aby odczytać te właściwości.
MSBUILD_MIN_SDK_VERSION
: minimalna wersja pakietu SDK do kompilowania pliku APK, podana jako ciąg znaków. Ustaw tę wartość w polu Minimalna wersja pakietu Android SDK na stronie komponentu projektu, jak pokazano na rysunku 2.
Rysunek 2. Właściwość Minimalna wersja pakietu Android SDKSkrypt Gradle build powinien ustawić
minSdkVersion
lubminSdk
na tę wartość ciągu znaków, a w razie potrzeby przeprowadzić konwersję typutoInteger()
.Groovy
android { // ... defaultConfig { applicationId "com.yourcompany.yourapp" minSdkVersion MSBUILD_MIN_SDK_VERSION // Or: minSdk MSBUILD_MIN_SDK_VERSION.toInteger() // ... } // ... }
Kotlin
android { // ... defaultConfig { applicationId = "com.yourcompany.yourapp" minSdkVersion(MSBUILD_MIN_SDK_VERSION) // Or: minSdk = MSBUILD_MIN_SDK_VERSION.toInteger() // ... } // ... }
MSBUILD_ANDROID_OUTPUT_APK_NAME
: oczekiwana nazwa pliku APK, który kompiluje Gradle. Rozszerzenie Android Game Development Extension wyszuka plik APK o tej nazwie, a potem wdroży go na połączonych urządzeniach (do debugowania i profilowania). Wpisz tę wartość w polu Nazwa pliku APK na stronie usługi projektu, jak pokazano na rysunku 3.
Rysunek 3. Właściwość Nazwa pliku APKSkrypt kompilacji Gradle musi uwzględniać tę właściwość. Na przykład w tym przykładzie nazwa wyjściowego pliku APK dla wszystkich wariantów jest ustawiana na nazwę wybraną przez MSBuild.
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
: katalog zawierający biblioteki udostępnione (pliki.so
) utworzone przez MSBuild. Ustaw tę wartość w polu Katalog wyjściowy na stronie usługi projektu, jak pokazano poniżej. Domyślnie jest to właściwość folderu wyjściowego projektu w Visual Studio, jak pokazano na rysunku 4.
Rysunek 4. Właściwość Katalog wyjściowyGradle powinien spakować pliki współdzielonej biblioteki w tym folderze w pliku APK, aby aplikacja na Androida mogła je wczytać w czasie działania.
Groovy
android { // ... sourceSets { main { jniLibs.srcDirs += [MSBUILD_JNI_LIBS_SRC_DIR] } } // ... }
Kotlin
android { // ... sourceSets.getByName("main") { jniLibs.srcDir(MSBUILD_JNI_LIBS_SRC_DIR) } // ... }
Ponieważ kompilacja dowolnego kodu C/C++ jest teraz wykonywana przez MSBuild, usuń sekcje
externalNativeBuild
ze skryptów kompilacji Gradle. Te sekcje służyły do wywoływania CMake lub ndk-build w celu skompilowania kodu C/C++, ale nie są już potrzebne.MSBUILD_NDK_VERSION
: wersja NDK, której należy użyć do kompilowania projektu. Ustaw tę wartość w polu Wersja NDK Androida na stronie „Właściwości projektu” (patrz rysunek 5).
Rysunek 5. Właściwość Android NDK VersionSkrypt kompilacji Gradle powinien ustawić wartość
ndkVersion
na tę wartość, jak pokazano poniżej:Groovy
android { // ... ndkVersion MSBUILD_NDK_VERSION // ... }
Kotlin
android { // ... ndkVersion = MSBUILD_NDK_VERSION // ... }
Więcej informacji znajdziesz w artykule o Android Studio Instalowanie i konfigurowanie NDK oraz CMake.