Préparation d'un projet SDL2 pour s'exécuter sur Android

Bonjour à tous. Aujourd'hui, nous verrons comment préparer un projet à l'aide de la bibliothèque sdl2 pour exécuter le jeu sur Android.

Vous devez d'abord télécharger Android Studio, l'installer et tout ce qui est nécessaire dans cet environnement pour le développement. Par exemple, j'ai maintenant Kde Neon, et sur ce système il y a un fichier / etc / environment, le même fichier existe dans ubuntu. Là, il est nécessaire d'enregistrer de telles variables.

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

Vous devez également télécharger NDK sur le site officiel, décompressez-le dans votre répertoire personnel et renommez-le NDK. Ensuite, vous devez télécharger la bibliothèque SDL2 depuis libsdl.org . Pour utiliser sdl2 pour Android, il est important de ne pas le compiler pour l'ordinateur, car il ne sera pas compilé pour Android. Pour que le projet soit compilé, vous devez créer un projet dans Android Studio, n'importe qui pour accepter la licence, sinon, lors de la construction de SDL2, vous demanderez une licence.

Pour lire des fichiers dans Android à partir d'actifs, vous devez utiliser les fonctions SDL_RWops. Voici un exemple d'utilisation dans le code de police. Dans ce cas, nous ne pouvons pas utiliser FT_New_Face, mais à la place, nous utiliserons FT_New_Memory_Face pour utiliser les données déjà lues.

 #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 

J'ai également créé un fichier d'en-tête pour connecter les en-têtes SDL2. NO_SDL_GLEXT est nécessaire au succès de la compilation pour Android.

 #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 

Le projet est donc prêt, les shaders sont prêts pour Opengl Es 3.0. Vous devez maintenant créer un projet android. Pour ce faire, décompressez l'archive SDL2. Allez dans build-scripts. Et nous le faisons.

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

Ce message apparaîtra.

 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 

Accédez à com.xverizex.test. Nous allons sur com.xverizex.test / app / jni / src. Copiez votre projet de jeu. Et nous changeons le fichier Android.mk, dans mon cas, il ressemble à ceci.

 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) 

Comme vous l'avez peut-être remarqué, je connecte également la bibliothèque Freetype2. J'en ai trouvé un prêt à l'emploi sur github pour android, mais cela n'a pas fonctionné, j'ai dû changer quelque chose. Créez également le répertoire app / src / main / assets. Nous y mettons nos ressources (polices, sprites, modèles 3D).

Configurez maintenant Freetype2 pour Android. Téléchargez depuis mon lien github et copiez le répertoire Freetype2 dans le répertoire app / jni /. Tout est prêt. Exécutez maintenant la commande com.xverizex.test ./gradlew installDebug. Afin d'ajouter ce jeu à Android, le débogage doit être activé dans Android. Pour ce faire, allez dans les paramètres, allez dans "Système", allez dans "À propos de la tablette" et appuyez sur l'option "Build number" environ six fois. Revenez ensuite en arrière et une option pour les développeurs apparaîtra. Nous entrons et l'allumons, nous activons également l'option «Débogage USB». Vous devez maintenant obtenir la clé de la tablette. Pour ce faire, installez le programme adb. Nous lançons adb shell dans la console, et la clé apparaît sur la tablette, qui doit être acceptée. Voilà, maintenant les jeux peuvent être téléchargés sur la tablette.

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


All Articles