Konfigurowanie projektu

Skonfiguruj projekt do korzystania z rozszerzenia Android Game Development Extension.

Rozszerzenie Android Game Development Extension wywołuje MSBuild, aby skompilować kod źródłowy C/C++ w biblioteki współdzielone (.so) i biblioteki statyczne (.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ą udostępniane przez rozszerzenie Android Game Development Extension.

AGDE używa wybranego 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:

  1. Kliknij Build > Configuration Manager (Budowanie > Menedżer konfiguracji).
  2. W sekcji Aktywna platforma rozwiązań kliknij <Nowa>.
  3. W przypadku nowej platformy wpisz jedną z tych opcji:

    • Android-armeabi-v7a
    • Android-arm64-v8a
    • Android-x86
    • Android-x86_64
  4. 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 pakietu 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 folderze projektu 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 ramach bieżącego projektu.

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 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 nazywany app 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 pakietu APK. Podaj tę wartość w polu Minimalna wersja pakietu Android SDK na stronie właściwości projektu, jak pokazano na rysunku 2.


    Rysunek 2. Właściwość Minimalna wersja pakietu Android SDK

    Skrypt kompilacji Gradle powinien ustawić wartość minSdkVersion na tę wartość, jak pokazano poniżej.

    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: oczekiwana nazwa pliku APK, który kompiluje Gradle. Rozszerzenie Android Game Development Extension będzie szukać pliku APK o tej nazwie, a potem wprowadzi go na połączone urządzenia (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 APK

    Skrypt 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ść katalogu wyjściowego projektu w Visual Studio, jak pokazano na rysunku 4.


    Rysunek 4. Właściwość Katalog wyjściowy

    Gradle 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ż kod C/C++ jest teraz kompilowany 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 Version

    Skrypt 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.