Përgatitja e projektit SDL2 për ekzekutimin në android

Përshëndetje të gjithëve. Sot do të shohim se si të përgatisim një projekt duke përdorur bibliotekën sdl2 për të nisur një lojë në android.

Fillimisht, duhet të shkarkoni Android Studio, ta instaloni atë dhe gjithçka që kërkohet në këtë mjedis për zhvillim. Për shembull, tani kam Kde Neon, dhe në këtë sistem ekziston një skedar /etc/environment, një skedar i tillë ka edhe ubuntu. Atje duhet të regjistrohen këto variabla.

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

Gjithashtu, duhet të shkarkoni NDK nga faqja zyrtare, ta shpaketoni në katalogun tuaj të shtëpisë dhe ta rinomini 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 kompjuterin, sepse atëherë nuk do të kompilohet për android. Për t'u kompileuar, duhet të krijoni një projekt në android studio, ndonjë, 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, duhet të përdorni funksionet SDL_RWops. Këtu është një shembull përdorimi në kodin që punon me shkrimin. Në këtë rast ne nuk mund të përdorim FT_New_Face, dhe në vend të saj do të përdorim FT_New_Memory_Face, për të përdorur të dhënat tashmë të 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

Gjithashtu, krijova një skedë titulli për të lidhur titujt e SDL2. NO_SDL_GLEXT është i nevojshëm për të siguruar që kompilatorja të kalojë me sukses 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

Pra, projekti është gati, shaderët janë gati për OpenGL ES 3.0. Tani duhet të krijoni android-project. Për këtë, shpaketoni arkivin SDL2. Shkoni në build-scripts. Dhe ekzekutoni kështu.

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

Do të shfaqet një mesazh i tillë.

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

Shkoni në com.xverizex.test. Shkoni në com.xverizex.test/app/jni/src. Kopjoni projektin tuaj të lojës. Dhe ndryshoni skedarin 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 skedarët tuaj të burimeve të aplikacionit 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ç mund ta keni vënë re, po lidh edhe bibliotekën Freetype2. E kam gjetur tashmë të gatshme në github për android, por ajo nuk punonte, nevojitej të ndryshohej disa gjëra. Gjithashtu krijoni katalogun app/src/main/assets. Në të vendosni burimet tona (fontet, sprite-t, modelet 3D).

Tani, do të konfiguroni Freetype2 për Android. Shkarkoni nga github-i im Link, dhe kopjoni katalogun Freetype2 në katalogun app/jni/. Të gjitha janë gati. Tani ekzekutoni komandën ../gradlew installDebug në com.xverizex.test. Që të mund të shtoni këtë lojë në android, duhet të aktivizohet debugging në android. Për këtë, shkoni te cilësimet, pastaj te 'Sistemi', pastaj te 'Për tabletin' dhe klikoni rreth gjashtë herë opsionin 'Numri i ndërtimit'. Pastaj kthehuni prapa dhe do të shfaqet opsioni 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ë, shkarkoni programin adb. Ekzekutoni në konsolë adb shell, dhe në tablet do të shfaqet çelësi që duhet ta pranoni. Të gjitha, tani mund të shkarkoni lojëra në tablet.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster