په Android کې د چلولو لپاره د SDL2 پروژې چمتو کول

سلام و ټولو ته. نن ورځ موږ به وګورو چې څنګه په Android کې د لوبې چلولو لپاره د sdl2 کتابتون په کارولو سره پروژه چمتو کړو.

لومړی تاسو اړتیا لرئ د Android سټوډیو ډاونلوډ کړئ ، دا نصب کړئ او هرڅه چې پدې پراختیا چاپیریال کې اړین دي. د مثال په توګه، زه اوس Kde Neon لرم، او پدې سیسټم کې یو فایل شتون لري /etc/environment، ورته فایل په اوبنټو کې شتون لري. لاندې متغیرات باید هلته داخل شي.

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

تاسو اړتیا لرئ د رسمي ویب پا fromې څخه 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 لپاره چمتو دي. اوس موږ اړتیا لرو چې د انډرایډ پروژه جوړه کړو. د دې کولو لپاره، د 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 کتابتون هم شاملوم. ما د انډرایډ لپاره په ګیتوب کې یو چمتو شوی وموند ، مګر دا کار ونکړ ، زه اړتیا لرم یو څه بدل کړم. موږ د لارښود ایپ/src/main/assets هم جوړوو. موږ خپلې سرچینې په دې کې ځای په ځای کوو (فونټونه، سپریټونه، 3D ماډل).

اوس راځئ چې د Android لپاره Freetype2 تنظیم کړو. زما د ګیتوب څخه ډاونلوډ کړئ لینک، او د Freetype2 لارښود ایپ/jni/ ډایرکټر ته کاپي کړئ. ټول چمتو دي. اوس په com.xverizex.test کې ./gradlew installDebug کمانډ چل کړئ. د دې لپاره چې دا لوبه په انډرایډ کې اضافه کړئ ، ډیبګ کول باید په Android کې فعال شي. د دې کولو لپاره ، تاسو اړتیا لرئ تنظیماتو ته لاړشئ ، "سیسټم" ته لاړشئ ، "د ټابلیټ په اړه" ته لاړشئ او شاوخوا شپږ ځله د "بډ نمبر" اختیار کلیک وکړئ. بیا بیرته لاړ شئ او د پراختیا کونکو لپاره اختیار به څرګند شي. دننه لاړشئ او چالان کړئ ، د "USB ډیبګینګ" اختیار هم فعال کړئ. اوس تاسو اړتیا لرئ د ټابلیټ لپاره کیلي ترلاسه کړئ. د دې کولو لپاره، د adb پروګرام نصب کړئ. موږ په کنسول کې د adb شیل پیل کوو، او په ټابلیټ کې یوه کیلي ښکاري چې باید ومنل شي. دا دی، اوس لوبې ستاسو ټابلیټ ته ډاونلوډ کیدی شي.

سرچینه: www.habr.com

Add a comment