Forbereder et SDL2-prosjekt for å kjøre på Android

Hei alle sammen. I dag skal vi se på hvordan du forbereder et prosjekt ved å bruke sdl2-biblioteket for å kjøre et spill på Android.

Først må du laste ned Android Studio, installere det og alt som kreves i dette utviklingsmiljøet. For eksempel har jeg nå Kde Neon, og på dette systemet er det en fil /etc/environment, den samme filen finnes i ubuntu. Følgende variabler må legges inn der.

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

Du må også laste ned NDK fra den offisielle nettsiden, pakke den ut i hjemmekatalogen din og gi den nytt navn til NDK. Deretter må du laste ned SDL2-biblioteket fra nettstedet libsdl.org. For å bruke sdl2 for android er det viktig å ikke kompilere det for datamaskinen, for da vil det ikke kompilere for android. For at prosjektet skal kompileres, må du opprette et prosjekt i android studio, hvilken som helst, for å godta lisensen, ellers vil SDL2 be om en lisens når du bygger.

For å lese filer i Android fra eiendeler, må du bruke SDL_RWops-funksjonene. Her er et eksempel på bruk i kode for å jobbe med en font. I dette tilfellet kan vi ikke bruke FT_New_Face, men vil i stedet bruke FT_New_Memory_Face for å bruke dataene som allerede er lest.

#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 opprettet også en overskriftsfil for å koble til SDL2-overskrifter. NO_SDL_GLEXT er nødvendig for at kompilering skal lykkes på 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å prosjektet er klart, shaders er klare for Opengl Es 3.0. Nå må vi lage et android-prosjekt. For å gjøre dette, pakk ut SDL2-arkivet. Gå til build-scripts. Og vi gjør det slik.

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

Følgende melding 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. Vi kopierer spillprosjektet vårt. Og vi endrer Android.mk-filen, i mitt tilfelle ser den slik ut.

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 kanskje allerede har lagt merke til, inkluderer jeg også Freetype2-biblioteket. Jeg fant en ferdig på github for android, men den fungerte ikke, jeg trengte å endre noe. Vi lager også en katalogapp/src/main/assets. Vi legger ressursene våre i den (fonter, sprites, 3D-modeller).

La oss nå konfigurere Freetype2 for Android. Last ned fra min github link, og kopier Freetype2-katalogen til app/jni/-katalogen. Alt er klart. Kjør nå kommandoen ./gradlew installDebug i com.xverizex.test. For å kunne legge dette spillet til Android, må feilsøking være aktivert i Android. For å gjøre dette, må du gå til innstillinger, gå til "System", gå til "Om nettbrett" og klikk på "Byggnummer" -alternativet omtrent seks ganger. Gå deretter tilbake og alternativet for utviklere vises. Gå inn og slå den på, slå også på alternativet "USB Debugging". Nå må du få en nøkkel til nettbrettet. For å gjøre dette, installer adb-programmet. Vi lanserer adb-skallet i konsollen, og det dukker opp en nøkkel i nettbrettet som må aksepteres. Det er det, nå kan spill lastes ned til nettbrettet ditt.

Kilde: www.habr.com

Legg til en kommentar