Priprava SDL2-projekta za zagon na androidu

Pozdravljeni vsi. Danes bomo pogledali, kako pripraviti projekt z uporabo knjižnice sdl2 za zagon igre na androidu.

Najprej morate prenesti Android Studio, ga namestiti in vse, kar potrebujete v tem okolju za razvoj. Na primer, trenutno imam Kde Neon, v tem sistemu obstaja datoteka /etc/environment, enaka datoteka je tudi v ubuntu. Tam morate zapisati te spremenljivke.

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

Prav tako morate prenesti NDK s uradne spletne strani, ga razpakirati v domači imenik in preimenovati v NDK. Nato morate prenesti knjižnico SDL2 s spletne strani libsdl.org. Da bi lahko uporabljali sdl2 za android, je pomembno, da je ne kompajlirate za računalnik, saj se tako ne bo skompajlirala za android. Da se projekt skompajliira, morate ustvariti projekt v android studio, kakršen koli, da sprejmete licenco, sicer bo SDL2 pri gradnji zahteval licenco.

Za branje datotek v androidu iz assets morate uporabiti funkcije SDL_RWops. Tukaj je primer uporabe v kodi za delo s pisavami. V tem primeru ne moremo uporabiti FT_New_Face, ampak namesto tega bomo uporabili FT_New_Memory_Face, da uporabimo že prebrane podatke.

#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

Prav tako sem ustvaril naslovno datoteko za povezovanje SDL2 glav. NO_SDL_GLEXT je potreben, da se kompilacija uspešno izvede 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

Torej je projekt pripravljen, shadri so pripravljeni za Opengl Es 3.0. Zdaj morate ustvariti android-project. To storite tako, da razpakirate arhiv SDL2. Vstopite v build-scripts. In izvede to.

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

Pojavilo se bo takšno sporočilo.

Za gradnjo in namestitev na napravo za testiranje zaženite naslednje:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug

Preidite v com.xverizex.test. Pojdite v com.xverizex.test/app/jni/src. Kopirajte svoj projekt igre. In spremenite datoteko Android.mk, v mojem primeru izgleda tako.

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

# Dodajte svoje datoteke izvorne aplikacije tukaj...
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, dodajam tudi knjižnico Freetype2. Našel sem že pripravljeno na githubu za android, vendar ni delovala, potrebne so bile nekatere spremembe. Prav tako ustvarite imenik app/src/main/assets. Vanj bomo postavili naše vire (pisave, sprite, 3D modeli).

Sedaj bomo konfigurirali Freetype2 za Android. Prenesite z mojega githuba. Povezava, in kopirajte mapo Freetype2 v mapo app/jni/. Vse je pripravljeno. Zdaj zaženite ukaz ./gradlew installDebug v com.xverizex.test. Da bi lahko dodali to igro v Android, mora biti odkrivanje napak omogočeno. Za to pojdite v nastavitve, izberite 'Sistem', nato 'O tabličnem računalniku' in šestkrat pritisnite na opcijo 'Številka gradnje'. Nato se vrnite nazaj in pojavila se bo opcija za razvijalce. Vstopite in omogočite to možnost ter tudi omogočite možnost 'Odkrivanje napak prek USB'. Zdaj potrebujete ključ za tablični računalnik. Za to namestite program adb. V konzoli zaženite adb shell in na tabličnem računalniku se prikaže ključ, ki ga je treba sprejeti. Vse, zdaj lahko nalagate igre na tablični računalnik.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster