Préparer un projet SDL2 à exécuter sur Android

Salut tout le monde. Aujourd'hui, nous allons voir comment préparer un projet en utilisant la bibliothèque sdl2 pour exécuter un jeu sur Android.

Vous devez d'abord télécharger Android Studio, l'installer ainsi que tout ce qui est requis dans cet environnement de 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. Les variables suivantes doivent y être saisies.

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

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

Pour lire des fichiers sous Android à partir d'actifs, vous devez utiliser les fonctions SDL_RWops. Voici un exemple d'utilisation dans le code pour travailler avec une police. Dans ce cas, nous ne pouvons pas utiliser FT_New_Face, mais utiliserons plutôt 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: %sn", 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 pour que la compilation réussisse sur 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. Nous devons maintenant créer un projet Android. Pour ce faire, décompressez l'archive SDL2. Accédez aux scripts de construction. Et nous le faisons comme ça.

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

Le message suivant 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. Accédez à com.xverizex.test/app/jni/src. Nous copions notre projet de jeu. Et on change le fichier Android.mk, dans mon cas ça ressemble à ça.

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 déjà remarqué, j'inclus également la bibliothèque Freetype2. J'en ai trouvé un tout fait sur github pour Android, mais cela n'a pas fonctionné, j'avais besoin de changer quelque chose. Nous créons également un répertoire app/src/main/assets. Nous y plaçons nos ressources (polices, sprites, modèles 3D).

Configurons maintenant Freetype2 pour Android. Télécharger depuis mon github Lien, et copiez le répertoire Freetype2 dans le répertoire app/jni/. Tout est prêt. Exécutez maintenant la commande ./gradlew installDebug dans com.xverizex.test. Pour pouvoir ajouter ce jeu sur Android, le débogage doit être activé sur Android. Pour ce faire, vous devez accéder aux paramètres, accéder à « Système », accéder à « À propos de la tablette » et cliquer environ six fois sur l'option « Numéro de build ». Revenez ensuite en arrière et l'option pour les développeurs apparaîtra. Entrez et allumez-le, activez également l’option « Débogage USB ». Vous devez maintenant obtenir une clé pour la tablette. Pour ce faire, installez le programme adb. On lance le shell adb dans la console, et une clé apparaît dans la tablette qu'il faut accepter. Ça y est, les jeux peuvent désormais être téléchargés sur votre tablette.

Source: habr.com

Ajouter un commentaire