Priprava projekta SDL2 za delovanje v sistemu Android

Pozdravljeni vsi skupaj. Danes si bomo ogledali, kako pripraviti projekt s knjižnico sdl2 za zagon igre v sistemu Android.

Najprej morate prenesti Android Studio, ga namestiti in vse, kar je potrebno v tem razvojnem okolju. Na primer, zdaj imam Kde Neon in v tem sistemu je datoteka /etc/environment, ista datoteka obstaja v ubuntu. Tam je treba vnesti naslednje spremenljivke.

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

Prav tako morate prenesti NDK z uradne spletne strani, ga razpakirati v domači imenik in preimenovati v NDK. Nato morate prenesti knjižnico SDL2 s spletnega mesta libsdl.org. Za uporabo sdl2 za android je pomembno, da ga ne prevedete za računalnik, ker potem ne bo prevedel za android. Da se projekt prevede, morate ustvariti projekt v android studiu, katerega koli, da sprejmete licenco, sicer bo SDL2 zahteval licenco pri gradnji.

Za branje datotek v androidu iz sredstev morate uporabiti funkcije SDL_RWops. Tukaj je primer uporabe v kodi za delo s pisavo. V tem primeru ne moremo uporabiti FT_New_Face, ampak bomo namesto tega uporabili FT_New_Memory_Face za uporabo že prebranih podatkov.

#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

Ustvaril sem tudi datoteko glave za povezavo glav SDL2. NO_SDL_GLEXT je potreben za uspešno prevajanje v sistemu 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

Projekt je torej pripravljen, shaderji so pripravljeni za Opengl Es 3.0. Zdaj moramo ustvariti android-projekt. Če želite to narediti, razpakirajte arhiv SDL2. Pojdite na build-scripts. In to naredimo takole.

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

Prikaže se naslednje sporočilo.

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

Pojdite na com.xverizex.test. Pojdite na com.xverizex.test/app/jni/src. Kopiramo naš projekt igre. In spremenimo datoteko Android.mk, v mojem primeru je videti takole.

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)

Kot ste morda že opazili, vključujem tudi knjižnico Freetype2. Našel sem že pripravljenega na githubu za android, vendar ni delovalo, moral sem nekaj spremeniti. Ustvarimo tudi imenik app/src/main/assets. Vanj postavimo naše vire (pisave, sprite, 3D modeli).

Zdaj pa konfigurirajmo Freetype2 za Android. Prenesi iz mojega githuba Linkin kopirajte imenik Freetype2 v imenik app/jni/. Vse je pripravljeno. Zdaj zaženite ukaz ./gradlew installDebug v com.xverizex.test. Če želite to igro dodati v Android, mora biti v sistemu Android omogočeno odpravljanje napak. Če želite to narediti, morate iti v nastavitve, pojdite na »Sistem«, pojdite na »O tabličnem računalniku« in približno šestkrat kliknite možnost »Številka gradnje«. Nato se vrnite in prikazala se bo možnost za razvijalce. Vstopite in ga vklopite, vklopite tudi možnost »USB Debugging«. Zdaj morate dobiti ključ za tablico. Če želite to narediti, namestite program adb. V konzoli zaženemo lupino adb in v tablici se prikaže ključ, ki ga je treba sprejeti. To je to, zdaj lahko igre prenesete na svoj tablični računalnik.

Vir: www.habr.com

Dodaj komentar