Përgatitja e projektit SDL2 për të funksionuar në android

Përshëndetje të gjithë. Sot do të shikojmë se si të përgatitim një projekt duke përdorur bibliotekën sdl2 për të lansuar një lojë në android.

Fillimisht, duhet të shkarkoni Android Studio, ta instaloni dhe të gjitha ato që kërkohen në këtë mjedis për zhvillim. Për shembull, unë tani kam Kde Neon, dhe në këtë sistem ekziston skedari /etc/environment, një skedar i tillë ka edhe Ubuntu. Atje duhen caktuar këto variabla.

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

Po ashtu duhet të shkarkoni NDK nga faqja zyrtare, ta shkarkoni në katalogun tuaj të shtëpisë, dhe ta rinovoni emrin në NDK. Më pas, duhet të shkarkoni bibliotekën SDL2 nga faqja libsdl.org. Për të përdorur sdl2 për android, është e rëndësishme të mos e kompilohet për kompjuter, sepse atëherë nuk do të kompilohet për android. Për të kompaktuar projektin, duhet të krijoni një projekt në android studio, ndonjëri, për të pranuar licencën, përndryshe gjatë ndërtimit SDL2 do të kërkojë licencën.

Për të lexuar skedarët në android nga assets, është e nevojshme të përdoren funksionet SDL_RWops. Ja një shembull përdorimi në kodin e punës me fontin. Në këtë rast ne nuk mund të përdorim FT_New_Face, por në vend të kësaj do të përdorim FT_New_Memory_Face, për të përdorur të dhënat e lexuara.

#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

Po kështu, krijova një skedë titulli për të lidhur titujt e SDL2. NO_SDL_GLEXT është i nevojshëm për ta kaluar me sukses kompilimin për 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

Tani projekti është gati, shaderat janë për Opengl Es 3.0. Tani na nevojitet të krijojmë një android-project. Për këtë, shkarkojmë arkivën SDL2. Shkruajmë në build-scripts. Dhe e kryejmë kështu.

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

Do të shfaqet një mesazh të tillë.

Për të ndërtuar dhe instaluar në një pajisje për testim, ekzekutoni më poshtë:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug

Shkoni te com.xverizex.test. Shkoni në com.xverizex.test/app/jni/src. Kopjoni projektin tuaj të lojës. Dhe ndryshoni skedën Android.mk, në rastin tim duket kështu.

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

# Shtoni skedat e burimeve të aplikacionit tuaj këtu...
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)

Si tashmë keni vënë re, po e lidh edhe bibliotekën Freetype2. E kam gjetur një version të gatshëm në github për android, por nuk funksiononte, duhej bërë disa ndryshime. Po ashtu krijojmë katalogun app/src/main/assets. Atje vendosim burimet tona (fontet, sprite, modele 3D).

Tani do të konfiguroni Freetype2 për Android. E shkarkoni nga github-i im. Link, dhe kopjojmë katalogun Freetype2 në katalogun app/jni/. Tani jemi gati. Tani ekzekutoni komandën ./gradlew installDebug në com.xverizex.test. Për të qenë në gjendje të shtoni këtë lojë në android, duhet të jetë e aktivizuar debugging në android. Për këtë, shkoni te cilësimet, shkoni te "Sistemi", shkoni te "Rreth tabletit" dhe klikoni rreth gjashtë herë në opsionin "Numri i ndërtimit". Më pas kthehuni prapa dhe do të shfaqet një opsion për zhvilluesit. Hyni dhe aktivizoni, gjithashtu aktivizoni opsionin "Debugging me USB". Tani duhet të merrni çelësin për tabletin. Për këtë, instalo programin adb. E filloni në konsolën adb shell, dhe në tablet do të shfaqet një çelës që duhet pranuar. Tani, lojërat mund të ngarkohen në tablet.

Burimi: habr.com

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster