Омода кардани лоиҳаи SDL2 барои кор дар Android

Салом ба ҳама. Имрӯз мо дида мебароем, ки чӣ гуна лоиҳаро бо истифода аз китобхонаи sdl2 барои иҷро кардани бозӣ дар Android таҳия кунем.

Аввалан шумо бояд Android Studio-ро зеркашӣ кунед, онро насб кунед ва ҳама чизеро, ки дар ин муҳити рушд лозим аст, насб кунед. Масалан, ман ҳоло Kde Neon дорам ва дар ин система файли /etc/environment мавҷуд аст, ҳамон файл дар ubuntu мавҷуд аст. Дар он ҷо тағирёбандаҳои зерин бояд ворид карда шаванд.

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

Шумо инчунин бояд NDK-ро аз вебсайти расмӣ зеркашӣ кунед, онро дар феҳристи хонагии худ кушоед ва номи онро ба NDK иваз кунед. Минбаъд шумо бояд китобхонаи SDL2-ро аз вебсайт зеркашӣ кунед libsdl.org. Барои истифодаи sdl2 барои андроид муҳим аст, ки онро барои компютер тартиб надиҳед, зеро он гоҳ он барои 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 эҷод кардам. Барои муваффақ шудан дар Android NO_SDL_GLEXT лозим аст.

#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 омодаанд. Ҳоло мо бояд лоиҳаи андроид созем. Барои ин, бойгонии 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 -ро дохил мекунам. Ман як чизи тайёрро дар github барои Android ёфтам, аммо он кор накард, ман бояд чизеро тағир диҳам. Мо инчунин як барномаи директория/src/main/assets эҷод мекунем. Мо захираҳои худро дар он ҷойгир мекунем (шрифтҳо, спрайтҳо, моделҳои 3D).

Акнун биёед Freetype2-ро барои Android танзим кунем. Аз github ман зеркашӣ кунед Link, ва директорияи Freetype2-ро ба директорияи app/jni/ нусхабардорӣ кунед. Ҳама омода аст. Акнун фармони ./gradlew installDebug -ро дар com.xverizex.test иҷро кунед. Барои он ки ин бозӣ ба андроид илова карда шавад, хатогиҳо бояд дар андроид фаъол карда шаванд. Барои ин ба шумо лозим аст, ки ба танзимот равед, ба "Система" равед, ба "Дар бораи планшет" гузаред ва имконоти "Сохтани рақам" -ро тақрибан шаш маротиба клик кунед. Пас баргардед ва вариант барои таҳиягарон пайдо мешавад. Дароед ва онро фаъол созед, инчунин имконоти "Debugging USB" -ро фаъол созед. Акнун шумо бояд калиди планшетро гиред. Барои ин, барномаи adb -ро насб кунед. Мо қабати adb -ро дар консол оғоз мекунем ва калид дар планшет пайдо мешавад, ки бояд қабул карда шавад. Ин аст, акнун бозиҳоро ба планшетатон зеркашӣ кардан мумкин аст.

Манбаъ: will.com

Илова Эзоҳ