Priprema SDL2 projekta za rad na androidu

Zdravo svima. Danas ćemo vidjeti kako pripremiti projekat koristeći sdl2 biblioteku za pokretanje igre na androidu.

Prvo morate preuzeti Android Studio, instalirati ga i sve što je potrebno u ovom razvojnom okruženju. Na primjer, trenutno imam Kde Neon, a na ovom sistemu postoji datoteka /etc/environment, ista datoteka postoji u ubuntu-u. Tamo je potrebno registrirati takve varijable.

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

Također morate preuzeti NDK sa službene stranice, raspakirati ga u svoj kućni direktorij i preimenovati ga u NDK. Zatim morate preuzeti SDL2 biblioteku sa stranice libsdl.org. Da biste koristili sdl2 za android važno je da ga ne kompajlirate za računar jer se tada neće kompajlirati za android. Da bi se projekat kompajlirao, potrebno je da kreirate projekat u android studiju, bilo koji, da prihvatite licencu, u suprotnom će prilikom pravljenja SDL2 tražiti licencu.

Za čitanje datoteka u androidu iz sredstava, trebate koristiti funkcije SDL_RWops. Evo primjera korištenja u kodu za rad sa fontom. U ovom slučaju, ne možemo koristiti FT_New_Face, već ćemo umjesto toga koristiti FT_New_Memory_Face da koristimo podatke koji su već pročitani.

#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

Također sam kreirao datoteku zaglavlja za povezivanje SDL2 zaglavlja. NO_SDL_GLEXT je neophodan da bi kompilacija uspjela za 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

Dakle, projekat je spreman, shaderi su spremni za Opengl Es 3.0. Sada treba da kreiramo android-projekat. Da biste to učinili, raspakirajte arhivu SDL2. Idite na build-skripte. I mi to radimo.

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

Ova poruka će se pojaviti.

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

Idite na com.xverizex.test. Idite na com.xverizex.test/app/jni/src. Kopirajte svoj projekat igre. I mijenjamo Android.mk fajl, u mom slučaju to izgleda ovako.

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)

Kao što ste možda primijetili, uključujem i Freetype2 biblioteku. Našao sam gotovu na githubu za android, ali nije išlo, morao sam nešto promijeniti. Također kreiramo direktorij app/src/main/assets. Stavljamo svoje resurse u to (fontove, sprite, 3d modele).

Sada postavimo Freetype2 za Android. Preuzmite sa mog github-a link, i kopirajte Freetype2 direktorij u app/jni/ direktorij. Sve je spremno. Sada pokrećemo naredbu ./gradlew installDebug u com.xverizex.test. Da biste mogli dodati ovu igru ​​na android, otklanjanje grešaka mora biti omogućeno u androidu. Da biste to učinili, morate otići u postavke, otići na "Sistem", otići na "O tabletu" i kliknuti na opciju "Build number" oko šest puta. Zatim se vratite i pojavit će se opcija za programere. Ulazimo i uključujemo ga, također uključujemo opciju "Debugging via USB". Sada moramo nabaviti ključ za tablet. Da biste to učinili, instalirajte program adb. Pokrećemo adb shell u konzoli, a na tabletu se pojavljuje ključ koji se mora prihvatiti. Sve, sada se igre mogu preuzeti na tablet.

izvor: www.habr.com

Dodajte komentar