Vorbereiten eines SDL2-Projekts für die Ausführung unter Android

Hallo allerseits. Heute werden wir sehen, wie man ein Projekt mit der sdl2-Bibliothek vorbereitet, um das Spiel auf Android auszuführen.

Zuerst müssen Sie Android Studio herunterladen, installieren und alles, was in dieser Umgebung für die Entwicklung erforderlich ist. Zum Beispiel habe ich jetzt Kde Neon, und auf diesem System gibt es eine / etc / environment-Datei, die gleiche Datei existiert in Ubuntu. Dort müssen solche Variablen registriert werden.

ANDROID_HOME=/home/username/Android/Sdk ANDROID_NDK_HOME=/home/username/ndk 

Sie müssen NDK auch von der offiziellen Website herunterladen, in Ihr Home-Verzeichnis entpacken und in NDK umbenennen. Als Nächstes müssen Sie die SDL2-Bibliothek von libsdl.org herunterladen . Um sdl2 für Android zu verwenden, ist es wichtig, es nicht für einen Computer zu kompilieren, da es dann nicht für Android kompiliert wird. Damit das Projekt kompiliert werden kann, müssen Sie ein Projekt in Android Studio erstellen, um die Lizenz zu akzeptieren. Andernfalls werden Sie beim Erstellen von SDL2 nach einer Lizenz gefragt.

Um Dateien in Android von Assets zu lesen, müssen Sie die SDL_RWops-Funktionen verwenden. Hier ist ein Beispiel für die Verwendung im Schriftcode. In diesem Fall können wir FT_New_Face nicht verwenden, sondern verwenden FT_New_Memory_Face, um die bereits gelesenen Daten zu verwenden.

 #ifdef __ANDROID__ snprintf ( path, 254, "fonts/%s", file ); SDL_RWops *rw = SDL_RWFromFile(path, "r" ); char *memory = ( char * ) calloc ( rw->hidden.androidio.size, 1 ); SDL_RWread(rw, memory, 1, rw->hidden.androidio.size ); FT_New_Memory_Face(*this->ft_library, ( const FT_Byte * )memory, rw->hidden.androidio.size, 0, &this;->face ); SDL_RWclose(rw); free ( memory ); #else snprintf ( path, 254, "%s/fonts/%s", DEFAULT_ASSETS, file ); if ( access ( path, F_OK ) ) { fprintf ( stderr, "not found font: %s\n", path ); exit ( EXIT_FAILURE ); } struct stat st; stat ( path, &st; ); FILE *rw = fopen ( path, "r" ); char *memory = ( char * ) calloc ( st.st_size, 1 ); fread ( memory, 1, st.st_size, rw ); FT_New_Memory_Face ( *this->ft_library, ( const FT_Byte * ) memory, st.st_size, 0, &this;->face ); fclose ( rw ); free ( memory ); #endif 

Ich habe auch eine Header-Datei zum Anschließen von SDL2-Headern erstellt. NO_SDL_GLEXT ist erforderlich, damit die Kompilierung für Android erfolgreich ist.

 #ifdef __ANDROID__ #include "SDL.h" #include "SDL_video.h" #include "SDL_events.h" #define NO_SDL_GLEXT #include "SDL_opengl.h" #include "SDL_opengles2.h" #else #include <SDL2/SDL.h> #include <SDL2/SDL_video.h> #include <SDL2/SDL_opengl.h> #include <SDL2/SDL_opengles2.h> #endif 

Damit das Projekt fertig ist, sind die Shader für Opengl Es 3.0 bereit. Nun musst du ein Android-Projekt erstellen. Entpacken Sie dazu das SDL2-Archiv. Gehe zu Build-Skripten. Und das machen wir auch.

 ./androidbuild.sh com.xverizex.test main.cpp 

Diese Meldung wird angezeigt.

 To build and install to a device for testing, run the following: cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test ./gradlew installDebug 

Gehen Sie zu com.xverizex.test. Wir gehen zu com.xverizex.test / app / jni / src. Kopieren Sie Ihr Spielprojekt. Und wir ändern die Android.mk-Datei, in meinem Fall sieht es so aus.

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main SDL_PATH := ../SDL FREETYPE_PATH := ../Freetype2 LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include $(LOCAL_PATH)/$(FREETYPE_PATH)/include # Add your application source files here... LOCAL_SRC_FILES := ./engine/lang.cpp ./engine/actor.cpp ./engine/sprite.cpp ./engine/shaders.cpp ./engine/box.cpp ./engine/menubox.cpp ./engine/load_manager.cpp ./engine/main.cpp ./engine/font.cpp ./engine/model.cpp ./engine/button.cpp ./theme.cpp ./level_manager.cpp ./menu/menu.cpp LOCAL_SHARED_LIBRARIES := SDL2 Freetype2 LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog include $(BUILD_SHARED_LIBRARY) 

Wie Sie vielleicht bemerkt haben, verbinde ich auch die Freetype2-Bibliothek. Ich habe ein fertiges auf Github für Android gefunden, aber es hat nicht funktioniert, ich musste etwas ändern. Erstellen Sie auch das Verzeichnis app / src / main / assets. Wir setzen unsere Ressourcen ein (Schriften, Sprites, 3D-Modelle).

Konfigurieren Sie nun Freetype2 für Android. Laden Sie von meinem Github- Link herunter und kopieren Sie das Verzeichnis Freetype2 in das Verzeichnis app / jni /. Alles ist fertig. Führen Sie nun den Befehl com.xverizex.test ./gradlew installDebug aus. Um dieses Spiel zu Android hinzuzufügen, muss das Debuggen in Android aktiviert sein. Gehen Sie dazu zu den Einstellungen, gehen Sie zu "System", gehen Sie zu "Über das Tablet" und drücken Sie ungefähr sechsmal die Option "Build number". Gehen Sie dann zurück und eine Option für Entwickler wird angezeigt. Wir gehen hinein und schalten es ein und aktivieren auch die Option „USB-Debugging“. Jetzt müssen Sie den Schlüssel für das Tablet erhalten. Installieren Sie dazu das Programm adb. Wir starten die adb-Shell in der Konsole und der Schlüssel wird auf dem Tablet angezeigt, der akzeptiert werden muss. Jetzt können die Spiele auf das Tablet heruntergeladen werden.

Source: https://habr.com/ru/post/de484526/


All Articles