Preparant un projecte SDL2 per executar-se a Android

Hola a tots. Avui veurem com preparar un projecte utilitzant la biblioteca sdl2 per executar un joc a Android.

Primer cal descarregar Android Studio, instal·lar-lo i tot el que es requereix en aquest entorn de desenvolupament. Per exemple, ara tinc Kde Neon, i en aquest sistema hi ha un fitxer /etc/environment, el mateix fitxer existeix a ubuntu. Cal introduir-hi les variables següents.

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

També heu de descarregar NDK des del lloc web oficial, descomprimir-lo al vostre directori d'inici i canviar-lo per NDK. A continuació, heu de descarregar la biblioteca SDL2 del lloc web libsdl.org. Per utilitzar sdl2 per a Android, és important no compilar-lo per a l'ordinador, perquè llavors no es compilarà per a Android. Perquè el projecte es compile, heu de crear un projecte a Android Studio, qualsevol, per acceptar la llicència, en cas contrari, SDL2 demanarà una llicència quan es construeixi.

Per llegir fitxers a Android des dels actius, heu d'utilitzar les funcions SDL_RWops. Aquí teniu un exemple d'ús en codi per treballar amb una font. En aquest cas, no podem utilitzar FT_New_Face, sinó que utilitzarem FT_New_Memory_Face per utilitzar les dades que ja s'han llegit.

#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

També vaig crear un fitxer de capçalera per connectar capçaleres SDL2. NO_SDL_GLEXT és necessari perquè la compilació tingui èxit a 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

Així que el projecte està preparat, els shaders estan preparats per a Opengl Es 3.0. Ara hem de crear un projecte Android. Per fer-ho, desempaqueteu l'arxiu SDL2. Aneu a build-scripts. I ho fem així.

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

Apareixerà el missatge següent.

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

Aneu a com.xverizex.test. Aneu a com.xverizex.test/app/jni/src. Copiem el nostre projecte de joc. I canviem el fitxer Android.mk, en el meu cas es veu així.

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)

Com ja heu notat, també inclou la biblioteca Freetype2. Vaig trobar-ne un de ja fet a github per a Android, però no va funcionar, havia de canviar alguna cosa. També creem un directori app/src/main/assets. Hi col·loquem els nostres recursos (fonts, sprites, models 3D).

Ara configurem Freetype2 per a Android. Descarrega des del meu github Enllaç, i copieu el directori Freetype2 al directori app/jni/. Tot a punt. Ara executeu l'ordre ./gradlew installDebug a com.xverizex.test. Per poder afegir aquest joc a Android, la depuració ha d'estar habilitat a Android. Per fer-ho, heu d'anar a la configuració, anar a "Sistema", anar a "Quant a la tauleta" i fer clic a l'opció "Número de compilació" unes sis vegades. A continuació, torneu i apareixerà l'opció per a desenvolupadors. Entreu i activeu-lo, també activeu l'opció "Depuració USB". Ara necessiteu obtenir una clau per a la tauleta. Per fer-ho, instal·leu el programa adb. Llencem l'intèrpret d'ordres adb a la consola i apareix una clau a la tauleta que s'ha d'acceptar. Això és tot, ara els jocs es poden descarregar a la teva tauleta.

Font: www.habr.com

Afegeix comentari