Hej alle sammen. I dag vil vi se på, hvordan man forbereder et projekt ved hjælp af SDL2-biblioteket til at køre et spil på Android.
Først skal du downloade Android Studio, installere det og alle nødvendige komponenter i denne udviklingsmiljø. For eksempel har jeg lige nu Kde Neon, og i dette system findes der en fil /etc/environment, en lignende fil findes også i Ubuntu. Her skal vi definere følgende variabler.
ANDROID_HOME=/home/brugernavn/Android/Sdk
ANDROID_NDK_HOME=/home/brugernavn/ndk
Du skal også downloade NDK fra den officielle hjemmeside, pakke den ud i din hjemmemappe og omdøbe den til NDK. Dernæst skal du downloade SDL2-biblioteket fra hjemmesiden . For at bruge SDL2 til Android er det vigtigt ikke at kompilere det til computeren, da det så ikke vil kunne kompileres til Android. For at projektet kan kompilere, skal du oprette et projekt i Android Studio, hvad som helst, for at acceptere licensen; ellers vil SDL2 bede om licens ved bygning.
For at læse filer i Android fra assets skal du bruge SDL_RWops-funktionerne. Her er et eksempel på brugen i koden til at arbejde med skrifttyper. I dette tilfælde kan vi ikke bruge FT_New_Face, men skal i stedet bruge FT_New_Memory_Face for 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 har også oprettet en headerfil til at inkludere SDL2-overskrifter. NO_SDL_GLEXT er nødvendigt for, at kompileringen kan gennemføres korrekt for 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 klart, shaderne er klar til OpenGL ES 3.0. Nu skal vi oprette android-project. For dette skal vi udpakke SDL2-arkivet. Gå til build-scripts. Og kør følgende.
./androidbuild.sh com.xverizex.test main.cpp
Der vil komme en sådan besked.
For at bygge og installere på en enhed til test skal du køre følgende:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug
Gå til com.xverizex.test. Gå ind i com.xverizex.test/app/jni/src. Kopier dit spilprojekt. Og ændr Android.mk-filen, som i mit tilfælde ser 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
# Tilføj dine applikationskildefiler her...
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 allerede har bemærket, tilføjer jeg endnu et bibliotek, Freetype2. Jeg fandt en klar version på GitHub til Android, men den virkede ikke, der skulle laves nogle ændringer. Vi opretter også kataloget app/src/main/assets. Her placerer vi vores ressourcer (fonts, sprites, 3D-modeller).
Lad os nu konfigurere Freetype2 til Android. Download fra min GitHub. , og kopier kataloget Freetype2 til kataloget app/jni/. Alt er klar. Nu kører vi kommandoen ./gradlew installDebug i com.xverizex.test. For at kunne tilføje dette spil til Android, skal debugging være slået til på Android. For at gøre dette, gå til indstillinger, gå til 'System', gå til 'Om tabletten' og tryk cirka seks gange på 'Byggnummer'-muligheden. Gå derefter tilbage, og der vises en mulighed for udviklere. Gå ind og tænd for den, og aktiver også 'USB-debugging'-optionen. Nu skal vi have en nøgle til tabletten. For at gøre dette skal vi installere adb-programmet. Kør adb shell i konsollen, og tabletten viser en nøgle, som skal accepteres. Det er det, nu kan spillene downloades til tabletten.
Kilde: habr.com
