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 . 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. , 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
