Undirbýr SDL2 verkefni til að keyra á Android

Hæ allir. Í dag munum við skoða hvernig á að undirbúa verkefni með því að nota sdl2 bókasafnið til að keyra leik á Android.

Fyrst þarftu að hlaða niður Android Studio, setja það upp og allt sem þarf í þessu þróunarumhverfi. Til dæmis er ég með Kde Neon núna og á þessu kerfi er skrá /etc/environment, sama skráin er til í ubuntu. Þar þarf að slá inn eftirfarandi breytur.

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

Þú þarft líka að hlaða niður NDK af opinberu vefsíðunni, pakka henni upp í heimaskrána þína og endurnefna hana í NDK. Næst þarftu að hlaða niður SDL2 bókasafninu af vefsíðunni libsdl.org. Til að nota sdl2 fyrir android er mikilvægt að setja það ekki saman fyrir tölvuna því þá mun það ekki safna saman fyrir Android. Til þess að verkefnið geti safnað saman þarftu að búa til verkefni í Android studio, hvaða sem er, til að samþykkja leyfið, annars mun SDL2 biðja um leyfi við byggingu.

Til að lesa skrár í Android úr eignum þarftu að nota SDL_RWops aðgerðir. Hér er dæmi um notkun í kóða til að vinna með leturgerð. Í þessu tilviki getum við ekki notað FT_New_Face, heldur munum við nota FT_New_Memory_Face til að nota gögnin sem þegar hafa verið lesin.

#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

Ég bjó líka til hausskrá til að tengja SDL2 hausa. NO_SDL_GLEXT er nauðsynlegt til að samantekt nái árangri á 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

Þannig að verkefnið er tilbúið, skyggingarnar eru tilbúnar fyrir Opengl Es 3.0. Nú þurfum við að búa til Android-verkefni. Til að gera þetta skaltu taka upp SDL2 skjalasafnið. Farðu í build-scripts. Og við gerum þetta svona.

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

Eftirfarandi skilaboð munu birtast.

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

Farðu á com.xverizex.test. Farðu á com.xverizex.test/app/jni/src. Við afritum leikjaverkefnið okkar. Og við breytum Android.mk skránni, í mínu tilfelli lítur hún svona út.

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)

Eins og þú hefur kannski þegar tekið eftir, þá læt ég líka Freetype2 bókasafnið fylgja með. Ég fann tilbúið á github fyrir Android, en það virkaði ekki, ég þurfti að breyta einhverju. Við búum líka til möppuforrit/src/main/assets. Við setjum auðlindir okkar í það (leturgerðir, sprites, þrívíddarlíkön).

Nú skulum við stilla Freetype2 fyrir Android. Sækja frá github Link, og afritaðu Freetype2 möppuna í app/jni/ möppuna. Allt er tilbúið. Keyrðu nú skipunina ./gradlew installDebug í com.xverizex.test. Til að geta bætt þessum leik við Android verður kembiforrit að vera virkt í Android. Til að gera þetta þarftu að fara í stillingar, fara í „Kerfi“, fara í „Um spjaldtölvu“ og smella á „Smíði númer“ valkostinn um það bil sex sinnum. Farðu síðan til baka og valkosturinn fyrir forritara birtist. Farðu inn og kveiktu á því, kveiktu einnig á „USB kembiforrit“ valkostinum. Nú þarftu að fá lykil fyrir spjaldtölvuna. Til að gera þetta skaltu setja upp adb forritið. Við ræsum adb skelina í stjórnborðinu og lykill birtist í spjaldtölvunni sem verður að samþykkja. Það er það, nú er hægt að hlaða niður leikjum á spjaldtölvuna þína.

Heimild: www.habr.com

Bæta við athugasemd