Përgatitja e një projekti SDL2 për të ekzekutuar në Android

Pershendetje te gjitheve. Sot do të shikojmë se si të përgatisim një projekt duke përdorur bibliotekën sdl2 për të ekzekutuar një lojë në Android.

Së pari ju duhet të shkarkoni Android Studio, ta instaloni atë dhe gjithçka që kërkohet në këtë mjedis zhvillimi. Për shembull, unë tani kam Kde Neon, dhe në këtë sistem ka një skedar /etc/environment, i njëjti skedar ekziston në ubuntu. Aty duhet të futen variablat e mëposhtëm.

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

Ju gjithashtu duhet të shkarkoni NDK nga faqja zyrtare e internetit, ta shpaketoni në direktorinë tuaj kryesore dhe ta riemërtoni në NDK. Më pas ju duhet të shkarkoni bibliotekën SDL2 nga faqja e internetit libsdl.org. Për të përdorur sdl2 për android, është e rëndësishme të mos e kompiloni atë për kompjuterin, sepse atëherë nuk do të kompilohet për android. Në mënyrë që projekti të kompilohet, duhet të krijoni një projekt në android studio, cilindo, për të pranuar licencën, përndryshe SDL2 do të kërkojë licencë gjatë ndërtimit.

Për të lexuar skedarë në android nga asetet, duhet të përdorni funksionet SDL_RWops. Këtu është një shembull i përdorimit të kodit për të punuar me një font. 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 që janë lexuar tashmë.

#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

Krijova gjithashtu një skedar kokë për të lidhur titujt SDL2. NO_SDL_GLEXT nevojitet që përpilimi të ketë sukses në 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, shaders janë gati për Opengl Es 3.0. Tani duhet të krijojmë një projekt android. Për ta bërë këtë, shpaketoni arkivin SDL2. Shko te build-scripts. Dhe ne e bëjmë atë kështu.

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

Mesazhi i mëposhtëm do të shfaqet.

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

Shkoni te com.xverizex.test. Shkoni te com.xverizex.test/app/jni/src. Ne kopjojmë projektin tonë të lojës. Dhe ne ndryshojmë 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

# 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)

Siç mund ta keni vënë re tashmë, unë gjithashtu përfshij bibliotekën Freetype2. Gjeta një të gatshme në github për android, por nuk funksionoi, më duhej të ndryshoja diçka. Ne gjithashtu krijojmë një aplikacion/src/kryesore/pasuri të drejtorisë. Ne vendosim burimet tona në të (fontet, spritet, modelet 3D).

Tani le të konfigurojmë Freetype2 për Android. Shkarkoni nga github-i im lidhje, dhe kopjoni direktorinë Freetype2 në direktorinë app/jni/. Gjithçka është gati. Tani ekzekutoni komandën ./gradlew installDebug në com.xverizex.test. Për të qenë në gjendje ta shtoni këtë lojë në android, korrigjimi duhet të aktivizohet në android. Për ta bërë këtë, duhet të shkoni te cilësimet, të shkoni te "Sistemi", të shkoni te "Rreth tabletit" dhe të klikoni opsionin "Numri i ndërtimit" rreth gjashtë herë. Më pas kthehuni dhe do të shfaqet opsioni për zhvilluesit. Hyni dhe ndizni, gjithashtu aktivizoni opsionin "Debugging USB". Tani ju duhet të merrni një çelës për tabletin. Për ta bërë këtë, instaloni programin adb. Ne lëshojmë adb shell në tastierë dhe në tablet shfaqet një çelës që duhet pranuar. Kjo është e gjitha, tani lojërat mund të shkarkohen në tabletin tuaj.

Burimi: www.habr.com

Shto një koment