آماده سازی پروژه SDL2 برای اجرا در اندروید

سلام به همه. امروز به نحوه تهیه پروژه با استفاده از کتابخانه sdl2 برای اجرای یک بازی در اندروید خواهیم پرداخت.

ابتدا باید اندروید استودیو را دانلود کنید، آن را نصب کنید و هر آنچه در این محیط توسعه مورد نیاز است را نصب کنید. به عنوان مثال، من اکنون Kde Neon دارم و در این سیستم یک فایل /etc/environment وجود دارد، همان فایل در اوبونتو وجود دارد. متغیرهای زیر باید در آنجا وارد شوند.

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

همچنین باید NDK را از وب سایت رسمی دانلود کنید، آن را در فهرست اصلی خود باز کنید و نام آن را به NDK تغییر دهید. در مرحله بعد باید کتابخانه SDL2 را از وب سایت دانلود کنید libsdl.org. برای استفاده از sdl2 برای اندروید، مهم است که آن را برای کامپیوتر کامپایل نکنید، زیرا در این صورت برای اندروید کامپایل نمی شود. برای اینکه پروژه کامپایل شود، باید یک پروژه در اندروید استودیو، هر کدام، ایجاد کنید تا مجوز را بپذیرید، در غیر این صورت SDL2 هنگام ساخت مجوز درخواست می کند.

برای خواندن فایل‌ها در اندروید از دارایی‌ها، باید از توابع 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-project ایجاد کنیم. برای انجام این کار، آرشیو SDL2 را باز کنید. به build-scripts بروید. و ما این کار را به این صورت انجام می دهیم.

./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 برای اندروید پیدا کردم، اما کار نکرد، باید چیزی را تغییر دهم. ما همچنین یک دایرکتوری app/src/main/assets ایجاد می کنیم. ما منابع خود را در آن قرار می دهیم (فونت، اسپرایت، مدل های سه بعدی).

حالا بیایید Freetype2 را برای اندروید پیکربندی کنیم. از github من دانلود کنید ارتباط دادنو دایرکتوری Freetype2 را در پوشه app/jni/ کپی کنید. همه چیز آماده است. حالا دستور ./gradlew installDebug را در com.xverizex.test اجرا کنید. برای اینکه بتوانید این بازی را به اندروید اضافه کنید، دیباگ در اندروید باید فعال باشد. برای انجام این کار، باید به تنظیمات بروید، به «سیستم» بروید، به «درباره تبلت» بروید و حدود شش بار روی گزینه «شماره ساخت» کلیک کنید. سپس به عقب برگردید و گزینه برای توسعه دهندگان ظاهر می شود. وارد شوید و آن را روشن کنید، همچنین گزینه “USB Debugging” را روشن کنید. حالا باید یک کلید برای تبلت بگیرید. برای این کار برنامه adb را نصب کنید. پوسته adb را در کنسول اجرا می کنیم و کلیدی در تبلت ظاهر می شود که باید پذیرفته شود. تمام است، اکنون بازی ها را می توان در رایانه لوحی خود بارگیری کرد.

منبع: www.habr.com

اضافه کردن نظر