Konfigurowanie projektu

Skonfiguruj projekt, aby używać rozszerzenia Android Game Development.

Rozszerzenie Android Game Development Extension wywołuje MSBuild, by stworzyć kod źródłowy w języku C/C++ w bibliotekach współdzielonych (.so) i bibliotekach statycznych (.a). Niestandardowe zadanie MSBuild podczas kompilacji wywołuje Gradle, by skompilować kod źródłowy w języku Java i Kotlin, utworzyć pakiet zasobów oraz wygenerować plik APK do wdrożenia. Podczas konfigurowania projektu musisz upewnić się, że MSBuild ma informacje potrzebne do skompilowania z myślą o platformie Androida.

Kompilowanie C/C++ za pomocą MSBuild

Typowy projekt na Androida jest tworzony w Gradle, gdzie natywny kod w projekcie jest kompilowany za pomocą karnetu Gradle uruchamiającego CMake lub ndk-build. Dzięki rozszerzeniu Android Game Development Visual Studio proces kompilacji jest odwrócony. Teraz jest to MSBuild. Cały kod źródłowy w języku C/C++ jest tworzony w pierwszej kolejności przez MSBuild dla nowych platform Androida zainstalowanych w systemie w ramach rozszerzenia (np. „Android-x86_64”). Następnie MSBuild wywołuje Gradle, aby spakować pliki zasobów wspólnych, które zawierają logikę C/C++, do pliku APK.

Najpierw zreplikuj istniejącą logikę kompilacji projektu w CMake lub ndk-build w MSBuild. Ustaw następujące platformy docelowe:

  • Android x86
  • Android x86_64
  • Android-armeabi-v7a
  • Android-arm64-V8a

Wszystkie te platformy są dostarczane przez rozszerzenie Android Game Development Extension.

Dodaj platformę Androida

Chociaż przykładowy projekt herbatnika obejmuje platformy Androida, musisz ręcznie dodać platformę Androida do istniejącego projektu. Aby dodać nową platformę, wykonaj w Visual Studio te czynności:

  1. Wybierz Build > Configuration Manager (Kompilacja > Menedżer konfiguracji).
  2. W sekcji Aktywna platforma rozwiązań wybierz <Nowa>.
  3. W przypadku nowej platformy wpisz jedną z poniższych wartości:

    • Android-armeabi-v7a
    • Android-arm64-v8a
    • Android-x86
    • Android-x86_64
  4. W polu Skopiuj ustawienia z wybierz inną istniejącą platformę Androida lub <Puste>, jeśli nie masz jeszcze żadnych platform Androida. Sprawdź, czy masz włączoną opcję Twórz nowe platformy projektów.

Dodaj element APK na Androida

Wybierz Dodaj > Nowy element > Visual C++ > Android > APK na Androida i kliknij Dodaj. W kolejnym oknie dialogowym skonfiguruj aplikację na Androida.

  • Nazwa aplikacji: czytelna dla człowieka nazwa aplikacji na Androida.
  • Identyfikator aplikacji: unikalny identyfikator aplikacji na Androida.
  • Lokalizacja Eksploratora rozwiązań: lokalizacja folderu wirtualnego, który zawiera dodane pliki obsługi pakietów Androida. Domyślnie pliki te znajdują się też w projekcie w folderze o tej samej nazwie. Możesz dostosować lokalizację, zaznaczając pole wyboru Umieść pliki pomocy w lokalizacji niestandardowej i określając lokalizację niestandardową. Folder wirtualny pozostanie w bieżącym projekcie w Eksploratorze rozwiązań.

Zadbaj o to, aby MSBuild wywołał Gradle w celu skompilowania pakietu APK

MSBuild nie może wywołać Gradle, jeśli nie zna lokalizacji projektu Gradle. Ustaw tę lokalizację za pomocą właściwości Gradle Build Directory, jak pokazano na ilustracji 1.


Rysunek 1. Właściwość Gradle Build Directory

Dodatkowo ustaw właściwości Application Module, Application Variant i APK Name (jak pokazano na poprzednim obrazie), aby MSBuild wiedziała, co kompilować.

  • Moduł aplikacji: nazwa podprojektu Gradle. To jest główny projekt ustawiony w pliku settings.gradle. W przypadku projektów utworzonych bezpośrednio w Android Studio nazwa ta zazwyczaj nosi nazwę app.
  • Wersja aplikacji: wariant Androida do skompilowania. Ta wartość powinna być ustawiona zgodnie z konfiguracjami MSBuild. Na przykład kompilacja do debugowania powinna mieć wartość ustawioną na wariant do debugowania. Jeśli nazwa konfiguracji MSBuild Twojego projektu pasuje do nazw wariantów Gradle, użyj po prostu wartości domyślnej $(Configuration).
  • Nazwa pliku APK: nazwa wygenerowanego pliku APK używanego do debugowania i profilowania na komputerze programistycznym. Ta nazwa jest przekazywana do Gradle i skrypt kompilacji Gradle powinien ją uwzględniać (zapoznaj się z właściwością MSBUILD_ANDROID_OUTPUT_APK_NAME w kolejnej sekcji).

Modyfikowanie skryptów kompilacji Gradle

Podczas kompilacji MSBuild przekazuje te informacje jako właściwości projektu do skryptu Gradle. Aby odczytywać te właściwości, zmień istniejące skrypty kompilacji w projekcie (zwykle o nazwie build.gradle).

  • MSBUILD_MIN_SDK_VERSION: minimalna wersja pakietu SDK do kompilowania pliku APK. Ustaw tę wartość w polu Minimalna wersja pakietu SDK na Androida na stronie właściwości projektu jak widać na ilustracji 2.


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

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

    Odlotowy

    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 utworzonego przez Gradle. Rozszerzenie do tworzenia gier na Androida poszuka pliku APK pasującego do tej nazwy, a następnie wdroży go na połączonych urządzeniach (na potrzeby debugowania i profilowania). Ustaw tę wartość w polu Nazwa pliku APK na stronie właściwości projektu jak widać na ilustracji 3.


    Rysunek 3. Właściwość Nazwa pliku APK

    Skrypt kompilacji Gradle musi przestrzegać tej właściwości. W tym przykładzie ustawiamy na przykład nazwę wyjściowego pliku APK dla wszystkich wariantów na nazwę wybraną przez MSBuild.

    Odlotowy

    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 pokazanej poniżej stronie właściwości projektu. Domyślnie jest to właściwość katalogu wyjściowego dla projektu Visual Studio, jak widać na ilustracji 4.


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

    Gradle powinna spakować pliki zasobów udostępnianych z tego folderu w pliku APK, aby aplikacja na Androida mogła ładować je w czasie działania.

    Odlotowy

    android {
      // ...
    
      sourceSets {
          main {
              jniLibs.srcDirs += [MSBUILD_JNI_LIBS_SRC_DIR]
          }
      }
    
      // ...
    }
    

    Kotlin

    android {
      // ...
    
      sourceSets.getByName("main") {
          jniLibs.srcDir(MSBUILD_JNI_LIBS_SRC_DIR)
      }
    
      // ...
    }
    

    Poza tym każdy kod C/C++ jest teraz kompilowany przez MSBuild, dlatego usuń sekcje externalNativeBuild ze skryptów kompilacji Gradle. Sekcje te były używane do wywoływania funkcji CMake lub ndk-build w celu skompilowania kodu C/C++, ale nie są już potrzebne.

  • MSBUILD_NDK_VERSION: wersja pakietu NDK do skompilowania projektu. Ustaw tę wartość w polu Wersja pakietu NDK dla Androida na stronie usługi projektu przedstawionej na rys. 5.


    Rysunek 5. Właściwość Android NDK Version

    Skrypt kompilacji Gradle powinien ustawić ndkVersion na tę wartość, jak w przykładzie:

    Odlotowy

    android {
      // ...
    
      ndkVersion MSBUILD_NDK_VERSION
    
      // ...
    }
    

    Kotlin

    android {
      // ...
    
      ndkVersion = MSBUILD_NDK_VERSION
    
      // ...
    }
    

    Więcej informacji znajdziesz w artykule na temat instalowania i konfigurowania NDK i CMake w Android Studio.