Forbereder et SDL2-projekt til at køre på Android

Hej alle. I dag vil vi se, hvordan man forbereder et projekt ved hjælp af sdl2-biblioteket til at køre spillet på Android.

Først skal du downloade Android Studio, installere det og alt hvad der kræves i dette udviklingsmiljø. For eksempel har jeg i øjeblikket Kde Neon, og der er en /etc/environment fil på dette system, den samme fil findes i ubuntu. Der er det nødvendigt at registrere sådanne variable.

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

Du skal også downloade NDK fra den officielle side, udpakke den til din hjemmemappe og omdøbe den til NDK. Dernæst skal du downloade SDL2-biblioteket fra webstedet libsdl.org. For at bruge sdl2 til Android er det vigtigt ikke at kompilere det til computer, for så vil det ikke kompilere til Android. For at projektet kan kompilere, skal du oprette et projekt i Android Studio, en hvilken som helst, for at acceptere licensen, ellers vil det bede om en licens, når du bygger SDL2.

For at læse filer i Android fra aktiver skal du bruge SDL_RWops-funktionerne. Her er et eksempel på at bruge det i kode til at arbejde med en skrifttype. I dette tilfælde kan vi ikke bruge FT_New_Face, men i stedet vil vi bruge FT_New_Memory_Face til at bruge de allerede læste data.

#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

Jeg oprettede også en header-fil til at forbinde SDL2-headere. NO_SDL_GLEXT er påkrævet for at kompilering lykkes til 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

Så projektet er klar, shaders er klar til Opengl Es 3.0. Nu skal vi lave et Android-projekt. For at gøre dette skal du pakke arkivet SDL2 ud. Gå til build-scripts. Og det gør vi.

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

Denne meddelelse vises.

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

Gå til com.xverizex.test. Gå til com.xverizex.test/app/jni/src. Kopier dit spilprojekt. Og vi ændrer Android.mk-filen, i mit tilfælde ser den sådan ud.

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)

Som du måske har bemærket, inkluderer jeg også Freetype2-biblioteket. Jeg fandt en færdiglavet en på github til android, men den virkede ikke, jeg var nødt til at ændre noget. Vi opretter også mappen app/src/main/assets. Vi lægger vores ressourcer i det (skrifttyper, sprites, 3d-modeller).

Lad os nu konfigurere Freetype2 til Android. Download fra min github Link, og kopier Freetype2-mappen til app/jni/-mappen. Alt er klar. Nu kører vi kommandoen ./gradlew installDebug i com.xverizex.test. For at kunne tilføje dette spil til Android, skal fejlfinding være aktiveret i Android. For at gøre dette skal du gå til indstillingerne, gå til "System", gå til "Om tablet" og trykke på "Byg nummer"-indstillingen omkring seks gange. Gå derefter tilbage, og muligheden for udviklere vises. Vi går ind og tænder den, tænder også for muligheden "Fejlretning via USB". Nu skal vi have nøglen til tabletten. For at gøre dette skal du installere adb-programmet. Vi starter adb-skallen i konsollen, og der kommer en nøgle op på tabletten, som skal accepteres. Alt, nu kan spillene downloades til tabletten.

Kilde: www.habr.com

Tilføj en kommentar