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.
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
Source: habr.com