Bonjour à tous. Aujourd'hui, nous allons voir comment préparer un projet en utilisant la bibliothÚque sdl2 pour lancer un jeu sur Android.
Tout d'abord, il faut télécharger Android Studio, l'installer et tout ce qui est nécessaire dans cet environnement de développement. Par exemple, j'ai actuellement Kde Neon, et dans ce systÚme, il existe un fichier /etc/environment, un fichier similaire se trouve aussi dans ubuntu. Il faut y inscrire ces variables.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Il faut également télécharger le NDK depuis le site officiel, l'extraire dans le répertoire personnel et le renommer en NDK. Ensuite, il faut télécharger la bibliothÚque SDL2 depuis le site . Pour utiliser sdl2 pour Android, il est important de ne pas le compiler pour un ordinateur, car sinon cela ne se compilera pas pour Android. Pour que le projet se compile, il faut créer un projet dans Android Studio, n'importe lequel, pour accepter la licence, sinon lors de la construction, SDL2 demandera la licence.
Pour lire des fichiers dans Android à partir des assets, il faut utiliser les fonctions SDL_RWops. Voici un exemple d'utilisation dans le code de gestion de la police. Dans ce cas, on ne peut 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: %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 inclure les en-tĂȘtes SDL2. NO_SDL_GLEXT est nĂ©cessaire pour que la compilation rĂ©ussisse 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
Ainsi, le projet est prĂȘt, les shaders sont prĂȘts pour OpenGL ES 3.0. Maintenant, il faut crĂ©er android-project. Pour cela, dĂ©compressez l'archive SDL2. Allez dans build-scripts. Et exĂ©cutez ainsi.
./androidbuild.sh com.xverizex.test main.cpp
Un message comme celui-ci apparaĂźtra.
Pour construire et installer sur un appareil pour les tests, exécutez ce qui suit:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug
Allez dans com.xverizex.test. Accédez à com.xverizex.test/app/jni/src. Copiez votre projet de jeu. Et modifiez le fichier Android.mk, dans mon cas, cela ressemble à cela.
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
# Ajoutez ici les fichiers sources de votre application...
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 avez peut-ĂȘtre dĂ©jĂ remarquĂ©, j'inclus Ă©galement la bibliothĂšque Freetype2. J'ai trouvĂ© une version prĂȘte sur github pour Android, mais elle ne fonctionnait pas, il fallait modifier certaines choses. CrĂ©ez Ă©galement le rĂ©pertoire app/src/main/assets. Nous y plaçons nos ressources (polices, sprites, modĂšles 3D).
Nous allons maintenant configurer Freetype2 pour Android. TĂ©lĂ©chargez-le depuis mon GitHub. , et copiez le rĂ©pertoire Freetype2 dans le rĂ©pertoire app/jni/. Tout est prĂȘt. Maintenant, exĂ©cutez la commande ./gradlew installDebug dans com.xverizex.test. Pour que ce jeu puisse ĂȘtre ajoutĂ© Ă Android, le dĂ©bogage doit ĂȘtre activĂ© dans Android. Pour cela, allez dans les paramĂštres, puis dans « SystĂšme », ensuite « Ă propos de la tablette » et appuyez environ six fois sur l'option « NumĂ©ro de build ». Revenez en arriĂšre et une option pour les dĂ©veloppeurs apparaĂźtra. AccĂ©dez-y et activez-la, puis activez Ă©galement l'option « DĂ©bogage USB ». Maintenant, il faut obtenir une clĂ© pour la tablette. Pour cela, installez le programme adb. Lancez adb shell dans la console, et une clĂ© apparaĂźtra sur la tablette, que vous devez accepter. VoilĂ , vous pouvez maintenant charger des jeux sur la tablette.
Source : habr.com
