Przykłady rozszerzenia do tworzenia gier na Androida pokazują, jak korzystać z najważniejszych funkcji tego rozszerzenia. W tym temacie opisujemy przykłady i ustawienia niezbędne do ich uruchomienia.
Na stronie pobierania dostępne są te próbki:
- HelloJNI: projekt wprowadzający.
- Endless-Tunnel: projekt tylko na Androida.
- Teapot: wieloplatformowy projekt na Windowsa i Androida.
- AssemblyCode-Link-Objects: projekt szablonu z kodem źródłowym zestawu.
Zanim zaczniesz
Zainstaluj rozszerzenie Android Game Development i przykłady. Więcej informacji znajdziesz w krótkim wprowadzeniu. Omówiono w nim również, jak utworzyć i uruchomić przykładowy kod, a także jak wykorzystać wersję Teapot w wersji na Androida.
Przewodnik po konfiguracji projektu opisuje, jak skonfigurować ustawienia projektu, który korzysta z rozszerzenia, np. dodać platformę Androida i plik APK.
HelloJNI
Przykładowy 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 i Android.
- Kod źródłowy Androida i katalog skryptów kompilacji Gradle: HelloJNI\AndroidPackaging
- Kod źródłowy Windows i katalog projektów Visual Studio: HelloJNI
Gdy tworzysz projekt, Visual Studio przekazuje poniższe ustawienia do pliku build.gradle
na poziomie aplikacji. Możesz zmienić te ustawienia, modyfikując skrypty 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:
- W Visual Studio otwórz i skompiluj próbkę HelloJNI.
- Dodaj platformę Android arm64-v8a. Więcej informacji znajdziesz w artykule o dodawaniu platformy Androida.
- Dodaj element APK na Androida do nowej platformy.
- Skompilować projekt.
- Dodaj te platformy Androida, a następnie do każdej z nich dodaj element APK na Androida: Android-armeabi-v7a, Android-x86 i Android-x86_64.
- Utwórz i uruchom przykład.
Niekończący się tunel
W grze Endless-Tunnel na Androida gracz zbiera białe kostki, próbując dotrzeć do końca tunelu. Został przeniesiony z próbki OpenGL w repozytorium Android NDK w GitHub Przykład nie zawiera gry w wersji na system Windows.
Przykład ma już skonfigurowane ustawienia i platformy Androida, więc możesz utworzyć i uruchomić projekt w Visual Studio bez żadnych modyfikacji. Po otwarciu rozwiązania Eksplorator rozwiązań wyświetli te moduły:
- niekończący się tunel: moduł aplikacji wyświetlający logikę gry.
- glm: zrzut repozytorium OpenGL Math utworzonego jako biblioteka statyczna.
- natywne_app_glue: kod NDK, który komunikuje się z obiektem NativeActivity.
Imbryk
Przykład Teapot wyświetla klasyczny imbryk renderowany w standardzie OpenGL ES i przeniesiony do rozszerzenia Android Game Development Extension, by zademonstrować te funkcje:
- Tworzenie projektów na wielu platformach: możesz utworzyć przykładową aplikację Teapot na Windows i Androida.
- Użycie niestandardowego pakietu na Androida: skrypty kompilacji Gradle zostały przeniesione do katalogu głównego próbki, w którym znajduje się plik
Teapot.sln
. - Eksperymentalna integracja kompilacji Ninja umożliwiająca otwieranie projektu w Android Studio.
- Niestandardowe konfiguracje Androida pokazujące, jak używać narzędzi Address Sanitizer (ASan) i Hardware Address Sanitizer (HWAsan).
Implementacja próbki Teapot jest podzielona na wiele części, co jest typowe w przypadku dużych aplikacji i gier na wielu platformach:
- Moduł
GameApplication
: definiuje działania użytkownika i stany aplikacji, np. obracający imbryk czy aktualizowanie statystyk aplikacji. - Moduł
GameEngine
: implementuje główny moduł renderowania.
Aby skonfigurować przykład i uruchomić go na urządzeniu z Androidem, przeczytaj krótkie wprowadzenie. Aby skonfigurować przykład i uruchomić go w systemie Windows:
- Zainstaluj GLEW:
- Pobierz i rozpakuj GLEW.
- Skopiuj pliki binarne z
$your-glew-directory\bin\Release\x64
do%SystemRoot%\system32
.
- Zainstaluj freeglut:
- Pobierz i rozpakuj freeglut.
- Skopiuj
$your-freeglut-directory\bin\x86\freeglut.dll
do%SystemRoot%\system32
.
- Dodaj zależności projektu freeglut:
- Otwórz
Teapot.sln
w Visual Studio. - W menu kliknij Debugowanie > x64 > Lokalny debuger Windows.
- W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy GameApplication i wybierz Właściwości > C/C++ > Ogólne > Dodatkowe katalogi.
- Dodaj do ścieżki element
$your-freeglut-dir\include
.
- Kliknij OK.
- Wybierz Linker > Ogólne > Dodatkowe katalogi bibliotek.
- Dodaj do ścieżki element
$your-freeglut-dir\lib\x64
. - Kliknij OK.
- Wybierz Linker > Ogólne > Dodatkowe katalogi bibliotek.
- Dodaj do ścieżki element
freeglut.lib
. - Kliknij OK.
- Otwórz
- Dodaj zależności projektu GLEW:
- W panelu Eksplorator rozwiązań kliknij prawym przyciskiem myszy GameApplication i wybierz Właściwości > C/C++ > Ogólne > Dodatkowe katalogi.
- Dodaj do ścieżki element
$your-glew-dir\include
. - Kliknij OK.
- Wybierz Linker > Ogólne > Dodatkowe katalogi bibliotek.
- Dodaj do ścieżki element
$your-glew-dir\lib\Release\x86
. - Kliknij OK.
- Wybierz Linker > Ogólne > Dodatkowe katalogi bibliotek.
- Dodaj do ścieżki element
glew32.lib
. - Kliknij OK.
- Uruchom przykład w systemie Windows:
- Na pasku narzędzi Visual Studio kliknij przycisk uruchamiania Local Windows Debugger (Lokalny debuger Windows).
- Przykład powinien wyglądać tak:
Obiekty linku AssemblyCode
To szablon, który pokazuje, jak wygenerować bibliotekę natywną Androida na podstawie kodu asemblera i kodu źródłowego w języku C/C++. Oto główne komponenty:
AssemblyCode-Link-Objects
: główna biblioteka natywna na Androida, stworzona na podstawie języka C++ i kodu źródłowego komponentów.StaticLib
: pomocnicza biblioteka statyczna, która eksportuje funkcjęfrom_static_lib_assembly_code_as
.
Projekt obsługuje wiele architektur. Każda obsługiwana architektura ma własne pliki źródłowe, które implementują funkcje eksportowane z StaticLib
.
Uwzględnij tylko pliki źródłowe asemblera dla kompilowanych platform. Ten projekt zawiera pliki asemblera w kompilacjach przy użyciu niestandardowych narzędzi do kompilacji.
Aby skonfigurować i utworzyć przykład:
- W Visual Studio sprawdź, czy na potrzeby plików asemblera są skonfigurowane niestandardowe narzędzia do kompilacji:
- W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy plik zestawu, a następnie kliknij Właściwości. Otworzy się okno Strony właściwości pliku.
- Wybierz konfigurację i platformę, np. Wszystkie konfiguracje na potrzeby Android-arm64-v8a.
- Sprawdź, czy opcja Ogólne > Wyklucz z kompilacji jest ustawiona na Nie.
- Sprawdź, czy Ogólne > Typ elementu jest ustawione na Custom Build Tool (Narzędzie do tworzenia niestandardowego).
- Jeśli chcesz wprowadzić zmiany, kliknij Zastosuj.
- Sprawdź, czy opcja Configuration Właściwości > Custom Build Tools > Command Line (Właściwości konfiguracji > Niestandardowe narzędzia kompilacji > Wiersz poleceń:) jest ustawiona na
$(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath)
. Pakiet NDK zawiera oddzielny asemrator dla każdej architektury procesora, a$(AsToolExe)
jest mapowany na prawidłowy kompilator. W tym przykładzie korzystamy z łańcucha narzędzi NDK do tworzenia projektów Androida x86 i x86_64. Jeśli na platformę Androida x86_64 chcesz użyć kodu yasm, zamiast tego użyj$(YasmToolExe)
. - Sprawdź, czy opcję Configuration Właściwości > Custom Build Tools > outputs (Właściwości konfiguracji > Niestandardowe narzędzia kompilacji > Dane wyjściowe:) ustawiono na
$(IntDir)%(FileName).o
. Ten ciąg znaków musi być zawarty w ustawieniu Wiersz poleceń. - Sprawdź, czy opcja Configuration Właściwości > Custom Build Tools > Link Objects (Właściwości konfiguracji > Niestandardowe narzędzia kompilacji > Obiekty połączenia) jest ustawiona na
Yes
.
Na przykład ustawienia Android-arm64-v8a powinny wyglądać podobnie do tego zrzutu ekranu:
- Skompilujesz projekt. Spowoduje to utworzenie pliku
libAssmeblyCodeLinkObjects.so
:- Otwórz plik
AssemblyCode-Link-Objects.sln
. - W menu kliknij Kompilacja > Utwórz rozwiązanie.
- Otwórz plik
- Aby sprawdzić, czy funkcje zostały prawidłowo wyeksportowane do biblioteki Androida, użyj narzędzia NDK nm.exe:
- W wierszu poleceń przejdź do przykładowego katalogu.
- Przejdź do lokalizacji biblioteki Androida, która została wygenerowana przez kompilację. Lokalizacja domyślna jest podobna do
$sample_dir\$solution_configuration\$solution_platform\$platform
i$sample_dir\Debug\Android-arm64-v8a\arm64-v8a
w przypadku platformy arm64-v8a. - Sprawdź, czy sekcja wyeksportowanych symboli zawiera funkcje, uruchamiając to 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 obejmują te elementy:
T from_shared_object_assembly_code_as
T from_static_lib_assembly_code_as