Android-da işə salmaq üçün SDL2 layihəsini hazırlamaq

Salam hər kəsə. Bu gün SDL2 kitabxanasından istifadə edərək android üçün oyun layihəsini necə hazırlayacağımızı nəzərdən keçirəcəyik.

İlk öncə Android Studio-nu yükləmək, quraşdırmaq və bu mühitdə inkişaf üçün lazım olan hər şeyi əldə etmək lazımdır. Məsələn, mənim hazırda KDE Neon var və bu sistemdə /etc/environment adlı fayl var, eyni fayl Ubuntu-da da vardır. Orada belə dəyişənləri qeyd etmək lazımdır.

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

Həmçinin NDK-ni rəsmi saytdan yükləyib, ev kataloquna açmalısınız və NDK adlandırmalısınız. Sonra SDL2 kitabxanasını da saytdan yükləmək lazımdır libsdl.org. SDL2-ni Android üçün istifadə etmək üçün, onu komputer üçün tərtib etməmək vacibdir, çünki bu halda, android üçün tərtib olunmayacaq. Layihənizin tərtib olunması üçün, Android Studio-da hər hansı bir layihə yaratmalısınız ki, lisenziyanı qəbul edəsiniz, əks halda SDL2-yə yığma zamanı lisenziya tələb ediləcək.

Android-da assets-dən faylları oxumaq üçün SDL_RWops funksiyalarından istifadə etməlisiniz. Burada şriftlə işləmək üçün kod nümunəsi verilib. Bu halda FT_New_Face istifadə edə bilmirik, onun əvəzinə FT_New_Memory_Face istifadə edəcəyik ki, artıq oxunan məlumatlardan istifadə edək.

#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

Həmçinin SDL2 başlıqları üçün başlıq faylı yaratdım. NO_SDL_GLEXT Android üçün tərtib olunmağın uğurla keçməsi üçün lazım idi.

#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

Beləliklə, layihə hazırdır, Opengl Es 3.0 üçün şeyderlər hazırdır. İndi android-project yaratmalıyıq. Bunun üçün SDL2 arxivini açırıq. build-scripts-ə daxil oluruq. Və belə icra edirik.

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

Belə bir mesaj görünəcək.

Test üçün cihazda tərtib etmək və quraşdırmaq üçün aşağıdakıları işlədin:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug

com.xverizex.test-a keçirik. com.xverizex.test/app/jni/src-a daxil oluruq. Oyun layihəmizi köçürürük. Və mənim halda Android.mk faylını dəyişirik, o belə görünür.

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

# Burada tətbiqinizin mənbə fayllarını əlavə edin...
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)

Artıq gördüyünüz kimi, Freetype2 kitabxanasını da əlavə edirəm. Mən android üçün github-da əvvəlcədən hazırlanmış birini tapdım, amma o işləmirdi, bir şey dəyişmək lazım idi. Həmçinin app/src/main/assets kataloqunu yaradırıq. Oraya resurslarımızı (şriftlər, sprites, 3D modellər) əlavə edirik.

İndi Freetype2-ni Android üçün konfiqurasiya edək. Mənim github-dan yükləyin. Link, və Freetype2 qovluğunu app/jni/ qovluğuna kopyalayırıq. Hamısı hazırdır. İndi com.xverizex.test-də ./gradlew installDebug əmrini işə salırıq. Android-də bu oyunu əlavə etmək üçün android-də debuq rejimi aktiv olmalıdır. Bunun üçün parametrlərə keçmək, «Sistem»ə, sonra «Tabletin haqqında» bölməsinə keçmək və «Versiya nömrəsi» seçimini altı dəfə vurmaq lazımdır. Sonra geri dönün və inkişaf etdiricilər üçün bir seçim görünəcək. Oraya daxil olun və aktiv edin, eyni zamanda «USB ilə debuq» seçimini də aktiv edin. İndi tablet üçün açar almaq lazımdır. Bunun üçün adb proqramını quraşdırırıq. Konsolda adb shell əmri işə salın, tabletin ekranında açarı qəbul etməli olduğunuz mesaj görünəcək. Hamısı, indi oyunları tabletlərə yükləyə bilərsiniz.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster