Priprema SDL2 projekta za rad na Androidu

Bok svima. Danas ćemo pogledati kako pripremiti projekt pomoću biblioteke sdl2 za pokretanje igre na Androidu.

Prvo morate preuzeti Android Studio, instalirati ga i sve što je potrebno u ovom razvojnom okruženju. Na primjer, sada imam Kde Neon, a na ovom sustavu postoji datoteka /etc/environment, ista datoteka postoji u ubuntu. Tamo je potrebno unijeti sljedeće varijable.

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

Također trebate preuzeti NDK sa službene web stranice, raspakirati ga u svoj home direktorij i preimenovati u NDK. Zatim trebate preuzeti SDL2 biblioteku s web stranice libsdl.org. Da biste koristili sdl2 za android, važno je ne kompajlirati ga za računalo, jer se tada neće kompilirati za android. Da bi se projekt kompajlirao potrebno je napraviti projekt u android studiu, bilo koji, prihvatiti licencu, inače će SDL2 tražiti licencu prilikom izgradnje.

Da biste čitali datoteke u androidu iz sredstava, morate koristiti funkcije SDL_RWops. Ovdje je primjer korištenja u kodu za rad s fontom. U ovom slučaju ne možemo koristiti FT_New_Face, već ćemo umjesto toga koristiti FT_New_Memory_Face za korištenje podataka 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 stvorio datoteku zaglavlja za povezivanje SDL2 zaglavlja. NO_SDL_GLEXT je potreban da bi kompilacija uspjela na Androidu.

#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, projekt je spreman, shaderi su spremni za Opengl Es 3.0. Sada moramo stvoriti android-projekt. Da biste to učinili, raspakirajte SDL2 arhivu. Idite na build-scripts. A mi to radimo ovako.

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

Pojavit će se sljedeća poruka.

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. Kopiramo naš projekt igre. I promijenimo datoteku Android.mk, u mom slučaju 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 već primijetili, uključujem i biblioteku Freetype2. Našao sam gotovu na githubu za android, ali nije radila, morao sam nešto promijeniti. Također stvaramo imenik app/src/main/assets. U njega postavljamo svoje resurse (fontove, spriteove, 3D modele).

Sada konfigurirajmo Freetype2 za Android. Preuzmi s mog githuba Veza, i kopirajte Freetype2 direktorij u app/jni/ direktorij. Sve je spremno. Sada pokrenite naredbu ./gradlew installDebug u com.xverizex.test. Da biste ovu igru ​​mogli dodati na android, otklanjanje pogrešaka mora biti omogućeno u androidu. Da biste to učinili, trebate otići na postavke, otići na "Sustav", otići na "O tabletu" i kliknuti opciju "Broj verzije" otprilike šest puta. Zatim se vratite i pojavit će se opcija za programere. Uđite i uključite ga, također uključite opciju "USB Debugging". Sada morate 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 treba prihvatiti. To je to, sada se igre mogu preuzeti na vaš tablet.

Izvor: www.habr.com

Dodajte komentar