Preparazione di un progetto SDL2 da eseguire su Android

Ciao a tutti. Oggi vedremo come preparare un progetto utilizzando la libreria sdl2 per eseguire un gioco su Android.

Per prima cosa devi scaricare Android Studio, installarlo e tutto ciò che è richiesto in questo ambiente di sviluppo. Ad esempio, ora ho Kde Neon e su questo sistema c'è un file /etc/environment, lo stesso file esiste in Ubuntu. Qui è necessario inserire le seguenti variabili.

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

Devi anche scaricare NDK dal sito ufficiale, decomprimerlo nella tua directory home e rinominarlo in NDK. Successivamente è necessario scaricare la libreria SDL2 dal sito web libsdl.org. Per utilizzare sdl2 per Android, è importante non compilarlo per il computer, perché in tal caso non verrà compilato per Android. Affinché il progetto possa essere compilato, è necessario creare un progetto in Android Studio, uno qualsiasi, per accettare la licenza, altrimenti SDL2 chiederà una licenza durante la creazione.

Per leggere file in Android dalle risorse, è necessario utilizzare le funzioni SDL_RWops. Ecco un esempio di utilizzo nel codice per lavorare con un carattere. In questo caso, non possiamo utilizzare FT_New_Face, ma utilizzeremo invece FT_New_Memory_Face per utilizzare i dati che sono già stati letti.

#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

Ho anche creato un file di intestazione per connettere le intestazioni SDL2. NO_SDL_GLEXT è necessario affinché la compilazione abbia esito positivo su 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

Quindi il progetto è pronto, gli shader sono pronti per Opengl Es 3.0. Ora dobbiamo creare un progetto Android. Per fare ciò, decomprimere l'archivio SDL2. Vai a build-script. E lo facciamo così.

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

Verrà visualizzato il seguente messaggio.

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

Vai su com.xverizex.test. Vai a com.xverizex.test/app/jni/src. Copiamo il nostro progetto di gioco. E cambiamo il file Android.mk, nel mio caso appare così.

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)

Come avrai già notato, includo anche la libreria Freetype2. Ne ho trovato uno già pronto su github per Android, ma non ha funzionato, avevo bisogno di cambiare qualcosa. Creiamo anche una directory app/src/main/assets. In esso inseriamo le nostre risorse (font, sprite, modelli 3D).

Ora configuriamo Freetype2 per Android. Scarica dal mio github Linke copiare la directory Freetype2 nella directory app/jni/. Tutto è pronto. Ora esegui il comando ./gradlew installDebug in com.xverizex.test. Per poter aggiungere questo gioco ad Android, il debug deve essere abilitato in Android. Per fare ciò, devi andare alle impostazioni, andare su "Sistema", andare su "Informazioni sul tablet" e fare clic sull'opzione "Numero build" circa sei volte. Quindi torna indietro e verrà visualizzata l'opzione per gli sviluppatori. Entra e accendilo, attiva anche l'opzione "Debug USB". Ora devi ottenere una chiave per il tablet. Per fare ciò, installa il programma adb. Lanciamo la shell adb nella console e nel tablet appare una chiave che deve essere accettata. Questo è tutto, ora i giochi possono essere scaricati sul tuo tablet.

Fonte: habr.com

Aggiungi un commento