Förbereder ett SDL2-projekt för att köras på Android

Hej alla. Idag ska vi titta på hur man förbereder ett projekt med hjälp av sdl2-biblioteket för att köra ett spel på Android.

Först måste du ladda ner Android Studio, installera den och allt som krävs i denna utvecklingsmiljö. Till exempel har jag nu Kde Neon, och på det här systemet finns en fil /etc/environment, samma fil finns i ubuntu. Följande variabler måste anges där.

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

Du måste också ladda ner NDK från den officiella webbplatsen, packa upp den i din hemkatalog och byta namn på den till NDK. Därefter måste du ladda ner SDL2-biblioteket från webbplatsen libsdl.org. För att använda sdl2 för android är det viktigt att inte kompilera det för datorn, för då kompilerar det inte för android. För att projektet ska kompileras måste du skapa ett projekt i android studio, vilken som helst, för att acceptera licensen, annars kommer SDL2 att be om en licens när du bygger.

För att läsa filer i Android från tillgångar måste du använda SDL_RWops-funktionerna. Här är ett exempel på användning i kod för att arbeta med ett teckensnitt. I det här fallet kan vi inte använda FT_New_Face, utan kommer istället att använda FT_New_Memory_Face för att använda data som redan har lästs.

#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

Jag skapade också en rubrikfil för att ansluta SDL2-huvuden. NO_SDL_GLEXT behövs för att kompileringen ska lyckas 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å projektet är klart, shaders är redo för Opengl Es 3.0. Nu måste vi skapa ett android-projekt. För att göra detta, packa upp SDL2-arkivet. Gå till build-scripts. Och vi gör så här.

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

Följande meddelande visas.

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å till com.xverizex.test. Gå till com.xverizex.test/app/jni/src. Vi kopierar vårt spelprojekt. Och vi ändrar filen Android.mk, i mitt fall ser den ut så här.

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 kanske redan har märkt inkluderar jag även Freetype2-biblioteket. Jag hittade en färdig på github för Android, men den fungerade inte, jag behövde ändra något. Vi skapar också en katalogapp/src/main/assets. Vi placerar våra resurser i den (typsnitt, sprites, 3D-modeller).

Låt oss nu konfigurera Freetype2 för Android. Ladda ner från min github Länk, och kopiera Freetype2-katalogen till app/jni/-katalogen. Allt är klart. Kör nu kommandot ./gradlew installDebug i com.xverizex.test. För att kunna lägga till detta spel till Android måste felsökning vara aktiverat i Android. För att göra detta måste du gå till inställningar, gå till "System", gå till "Om surfplatta" och klicka på alternativet "Byggnummer" ungefär sex gånger. Gå sedan tillbaka och alternativet för utvecklare visas. Gå in och slå på den, aktivera även alternativet "USB Debugging". Nu måste du skaffa en nyckel till surfplattan. För att göra detta, installera adb-programmet. Vi startar adb-skalet i konsolen och en nyckel dyker upp i surfplattan som måste accepteras. Det var allt, nu kan spel laddas ner till din surfplatta.

Källa: will.com

Lägg en kommentar