Sample

Przykłady rozszerzenia do tworzenia gier na Androida pokazują, jak korzystać z kluczowych funkcji rozszerzenia. W tym temacie opisano przykłady oraz niezbędne do jego uruchomienia.

Poniższe przykłady są dostępne w strona pobierania:

  • HelloJNI: projekt wprowadzający.
  • Endless-Tunnel: projekt tylko na Androida.
  • Teapot: wieloplatformowy projekt na systemy Windows i Android.
  • AssemblyCode-Link-Objects: projekt szablonu zawierający kod źródłowy asemblera.

Zanim rozpoczniesz

  • Zainstaluj rozszerzenie Android Game Development Extension i przykłady. Zobacz krótkie wprowadzenie. Opisaliśmy w nim również, jak tworzyć i uruchomisz próbkę z użyciem wersji aplikacji Teapot na Androida. .

  • Przewodnik po konfiguracji projektu zawiera informacje o tym, skonfigurować ustawienia projektu korzystającego z tego rozszerzenia, takie jak dodając platformę Androida i plik APK.

HelloJNI

Przykład HelloJNI to prosty projekt, który wyświetla komunikat „Hello from JNI” w oknie aplikacji. Projekt używa innego zestawu kodu źródłowego dla systemów Windows na urządzeniu z Androidem.

  • Katalog kodu źródłowego Androida i katalogu skryptów kompilacji Gradle: HelloJNI\AndroidPackaging
  • Kod źródłowy Windows i katalog projektów Visual Studio: HelloJNI.

Podczas kompilacji projektu Visual Studio przekazuje te dane: ustawień do pliku build.gradle na poziomie aplikacji. Możesz zmienić te ustawienia przez zmianie skryptów kompilacji Gradle.

  • MSBUILD_NDK_VERSION
  • MSBUILD_MIN_SDK_VERSION
  • MSBUILD_JNI_LIBS_SRC_DIR
  • MSBUILD_ANDROID_OUTPUT_APK_NAME
  • MSBUILD_ANDROID_GRADLE_BUILD_OUTPUT_DIR

Aby skonfigurować i uruchomić przykład:

  1. W Visual Studio otwórz i skompiluj przykładowy kod HelloJNI.
  2. Dodaj platformę Android arm64-v8a. Więcej Więcej informacji zawiera Dodawanie platformy Androida
  3. Dodawanie elementu APK na Androida na nową platformę.
  4. Skompiluj projekt.
  5. Dodaj te platformy Androida, a potem dodaj element APK na Androida Android-armeabi-v7a, Android-x86 i Android-x86_64.
  6. Utwórz i uruchom przykład.

Niekończący się tunel

Przykład „Endless-Tunnel” to gra na Androida, w której gracz zbiera białe tło zbliżając się do końca tunelu. Została ona przeniesiona z OpenGL w Repozytorium Androida NDK na GitHubie. Przykład nie obejmuje wersji gry na Windows.

Ustawienia i platformy Androida są już skonfigurowane dla przykładu, więc możesz kompilować i uruchamiać projekt w Visual Studio bez żadnych modyfikacji. Gdy otworzy rozwiązanie, Eksplorator rozwiązań wyświetli te moduły:

  • tunel bez końca: moduł aplikacji, który wyświetla logikę gry.
  • glm: migawka repozytorium Math OpenGL. która ma postać biblioteki statycznej.
  • natywny_app_glue: kod NDK komunikujący się z NativeActivity obiektu.

Czajniczek

W przykładzie „Teapot” wyświetla się klasyczny dzbank do herbaty renderowany z użyciem OpenGL ES i rozszerzenie do Android Game Development Extension, by zademonstrować te funkcje:

  • Programowanie projektów na wielu platformach: możesz utworzyć próbkę Teapot dla Windows i Android.
  • Niestandardowe pakiety dla Androida: skrypty kompilacji Gradle zostały przeniesione do w katalogu głównym próbki, w którym znajduje się plik Teapot.sln.
  • Eksperymentalna integracja kompilacji Ninja, która umożliwia otwórz projekt w Android Studio.
  • Niestandardowe konfiguracje Androida pokazujące, jak używać Adres Sanitizer (ASan) i Hardware Address Sanitizer (HWAsan) –

Implementacja próbki Teapot jest podzielona na wiele części, typowe dla dużych aplikacji i gier działających na wielu platformach:

  • Moduł GameApplication: określa działania użytkownika i stany aplikacji, takie jak gdy użytkownik obraca czajnik albo aktualizuje statystyki aplikacji.
  • Moduł GameEngine: implementuje podstawowy moduł renderowania.

Aby skonfigurować przykładowy kod i uruchomić go na urządzeniu z Androidem, zapoznaj się z krótkim wprowadzeniem. Do skonfiguruj przykład i uruchom go w systemie Windows:

  1. Zainstaluj GLEW:
    1. Pobierz i rozpakuj GLEW.
    2. Skopiuj pliki binarne z $your-glew-directory\bin\Release\x64 do %SystemRoot%\system32
  2. Zainstaluj freeglut:
    1. Pobierz i rozpakuj freeglut.
    2. Skopiuj $your-freeglut-directory\bin\x86\freeglut.dll do %SystemRoot%\system32.
  3. Dodaj zależności projektu freeglut:
    1. Otwórz Teapot.sln w Visual Studio.
    2. W menu kliknij Debuguj >. x64 > Lokalny debuger systemu Windows.
    3. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy GameApplication i wybierz Właściwości > C/C++ > Ogólne > Dodatkowe katalogi uwzględniania.
    4. Dodaj do ścieżki element $your-freeglut-dir\include.
      Zrzut ekranu okna Dodatkowe katalogi uwzględniania.
    5. Kliknij OK.
    6. Wybierz Linker > Ogólne > Dodatkowe katalogi biblioteczne
    7. Dodaj do ścieżki element $your-freeglut-dir\lib\x64. Zrzut ekranu okna Dodatkowe katalogi biblioteczne.
    8. Kliknij OK.
    9. Wybierz Linker > Ogólne > Dodatkowe katalogi biblioteczne
    10. Dodaj do ścieżki element freeglut.lib.
    11. Kliknij OK.
  4. Dodaj zależności projektu GLEW:
    1. W panelu Eksplorator rozwiązań kliknij prawym przyciskiem myszy. GameApplication i wybierz Właściwości > C/C++ > Ogólne > Dodatkowe katalogi uwzględniania.
    2. Dodaj do ścieżki element $your-glew-dir\include.
    3. Kliknij OK.
    4. Wybierz Linker > Ogólne > Dodatkowe katalogi biblioteczne
    5. Dodaj do ścieżki element $your-glew-dir\lib\Release\x86.
    6. Kliknij OK.
    7. Wybierz Linker > Ogólne > Dodatkowe katalogi biblioteczne
    8. Dodaj do ścieżki element glew32.lib.
    9. Kliknij OK.
  5. Uruchom przykład w systemie Windows:
    1. Na pasku narzędzi Visual Studio kliknij przycisk uruchamiania Local Windows Debugger.
    2. Przykład powinien wyglądać tak:
      Zrzut ekranu pokazujący przykładową aplikację Herapot działającą w systemie Windows.

To jest projekt szablonu pokazujący, jak wygenerować aplikację natywną na Androida. z asmbly i kodu źródłowego w C/C++. Oto główne komponenty:

  • AssemblyCode-Link-Objects: główna biblioteka natywna na Androida utworzona na podstawie C++ oraz kod źródłowy asemblera.
  • StaticLib: pomocnicza biblioteka statyczna, która eksportuje dane from_static_lib_assembly_code_as.

Ten projekt obsługuje wiele architektur. Każda obsługiwana architektura ma swoje własne pliki źródłowe implementujące funkcje eksportowane z StaticLib. Uwzględnij tylko pliki źródłowe zestawu dla używanych platform budynku. Ten projekt uwzględnia pliki asemblera w kompilacjach za pomocą niestandardowych narzędzi do kompilacji.

Aby skonfigurować i utworzyć przykład:

  1. W Visual Studio sprawdź, czy niestandardowe narzędzia do kompilacji są skonfigurowane pod kątem pliki montażowe:
    1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy i kliknij Właściwości. Otworzy się Okno Właściwości stron dla pliku.
    2. Wybierz konfigurację i platformę, na przykład Wszystkie konfiguracje dla Android-arm64-v8a
    3. Upewnij się, że opcje Ogólne > – ustawienie Wyklucz z kompilacji. na Nie.
    4. Upewnij się, że opcje Ogólne > Typ elementu jest ustawiony. do Custom Build Tool.
    5. Jeśli chcesz zastosować zmiany, kliknij Zastosuj.
    6. Upewnij się, że Właściwości konfiguracji > Niestandardowe narzędzia do kompilacji > Wiersz poleceń: jest ustawiona na $(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath) NDK zawiera osobny program asembistyczny dla każdej architektury procesora. $(AsToolExe) mapuje do odpowiedniego narzędzia asemblera. Ten fragment Wykorzystuje łańcuch narzędzi NDK do tworzenia systemów Android x86 i x86_64 w projektach AI. Jeśli chcesz użyć yasm w przypadku platformy Androida x86_64, użyj interfejsu $(YasmToolExe).
    7. Upewnij się, że Właściwości konfiguracji > Niestandardowe narzędzia do kompilacji > Dane wyjściowe: jest ustawiona na $(IntDir)%(FileName).o Ten ciąg musi być uwzględniony w ustawieniu Wiersz poleceń.
    8. Upewnij się, że Właściwości konfiguracji > Niestandardowe narzędzia do kompilacji > Połącz obiekty: jest ustawiona na Yes

    Na przykład ustawienia Android-arm64-v8a powinny wyglądają podobnie do tego zrzutu ekranu:

    Zrzut ekranu strony właściwości narzędzia do tworzenia niestandardowych komponentów.
  2. Skompiluj projekt. Dzięki temu Plik libAssmeblyCodeLinkObjects.so:
    1. Otwórz plik AssemblyCode-Link-Objects.sln.
    2. W menu kliknij Kompilacja > Utwórz rozwiązanie.
  3. Aby sprawdzić, czy funkcje zostały prawidłowo wyeksportowane na Androida użyj narzędzia nm.exe NDK:
    1. W wierszu poleceń przejdź do przykładowego katalogu.
    2. Przejdź do lokalizacji biblioteki Androida wygenerowanej przez tworzyć. Lokalizacja domyślna jest podobna do $sample_dir\$solution_configuration\$solution_platform\$platform i $sample_dir\Debug\Android-arm64-v8a\arm64-v8a za platformy arm64-v8a.
    3. Sprawdź, czy wyeksportowana sekcja symboli zawiera funkcje za pomocą uruchamiając następujące polecenie:
        \ndk\toolschains\llvm\prebuilt\windows-x86_64\aarch64-linux-android\bin\nm.exe --defined-only \Debug\Android-arm64-v8a\arm64-v8a\libAssmeblyCodeLinkObjects.so
      

      W danych wyjściowych powinna pojawić się lista symboli, które zawierają :

         T from_shared_object_assembly_code_as
         T from_static_lib_assembly_code_as