Android жүйесінде іске қосу үшін SDL2 жобасын дайындау

Бәріңе сәлем. Бүгін біз Android жүйесінде ойынды іске қосу үшін sdl2 кітапханасын пайдаланып жобаны қалай дайындау керектігін қарастырамыз.

Алдымен Android Studio студиясын жүктеп алып, оны орнатып, осы әзірлеу ортасында қажеттінің барлығын орнату керек. Мысалы, менде қазір Kde Neon бар және бұл жүйеде /etc/environment файлы бар, сол файл ubuntu-да бар. Онда келесі айнымалы мәндерді енгізу қажет.

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

Сондай-ақ NDK-ны ресми веб-сайттан жүктеп алып, оны үй каталогына шығарып, оны NDK деп өзгерту керек. Содан кейін веб-сайттан SDL2 кітапханасын жүктеп алу керек libsdl.org. Android үшін sdl2 пайдалану үшін оны компьютер үшін құрастырмау маңызды, өйткені ол Android үшін компиляцияланбайды. Жобаны құрастыру үшін лицензияны қабылдау үшін Android студиясында кез келген жобаны жасау керек, әйтпесе SDL2 құрылыс кезінде лицензия сұрайды.

Активтерден Android жүйесіндегі файлдарды оқу үшін SDL_RWops функцияларын пайдалану қажет. Мұнда қаріппен жұмыс істеу үшін кодты пайдалану мысалы берілген. Бұл жағдайда біз FT_New_Face пайдалана алмаймыз, оның орнына оқылған деректерді пайдалану үшін FT_New_Memory_Face пайдаланамыз.

#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

Мен сондай-ақ SDL2 тақырыптарын қосу үшін тақырып файлын жасадым. NO_SDL_GLEXT компиляция 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

Сонымен, жоба дайын, шейдерлер Opengl Es 3.0 үшін дайын. Енді Android-жобасын жасау керек. Ол үшін SDL2 мұрағатын орауыштан шығарыңыз. Құрастыру сценарийлеріне өтіңіз. Ал біз мұны осылай жасаймыз.

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

Келесі хабарлама пайда болады.

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

com.xverizex.test сайтына өтіңіз. com.xverizex.test/app/jni/src сайтына өтіңіз. Біз ойын жобамызды көшіреміз. Біз Android.mk файлын өзгертеміз, менің жағдайымда ол осылай көрінеді.

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)

Сіз байқағаныңыздай, мен Freetype2 кітапханасын қосамын. Мен Android жүйесіне арналған github-та дайын нұсқаны таптым, бірақ ол жұмыс істемеді, маған бір нәрсені өзгерту керек болды. Сондай-ақ, қолданба/src/main/assets каталогын жасаймыз. Біз оған ресурстарымызды орналастырамыз (қаріптер, спрайттар, 3D модельдер).

Енді Android үшін Freetype2 конфигурациясын көрейік. Менің github сайтымнан жүктеп алыңыз байланыс, және Freetype2 каталогын app/jni/ каталогына көшіріңіз. Бәрі дайын. Енді com.xverizex.test ішінде ./gradlew installDebug пәрменін іске қосыңыз. Бұл ойынды Android жүйесіне қосу үшін Android жүйесінде жөндеуді қосу керек. Ол үшін параметрлерге өтіп, «Жүйе» бөліміне өтіп, «Планшет туралы» бөліміне өтіп, «Құрастыру нөмірі» опциясын шамамен алты рет басу керек. Содан кейін кері оралыңыз және әзірлеушілерге арналған опция пайда болады. Кіріңіз және оны қосыңыз, сонымен қатар «USB жөндеу» опциясын қосыңыз. Енді планшеттің кілтін алу керек. Ол үшін adb бағдарламасын орнатыңыз. Біз консольде adb қабығын іске қосамыз және планшетте қабылдануы керек кілт пайда болады. Міне, енді ойындарды планшетке жүктеп алуға болады.

Ақпарат көзі: www.habr.com

пікір қалдыру