سلام به همه. امروز به نحوه تهیه پروژه با استفاده از کتابخانه sdl2 برای اجرای یک بازی در اندروید خواهیم پرداخت.
ابتدا باید اندروید استودیو را دانلود کنید، آن را نصب کنید و هر آنچه در این محیط توسعه مورد نیاز است را نصب کنید. به عنوان مثال، من اکنون Kde Neon دارم و در این سیستم یک فایل /etc/environment وجود دارد، همان فایل در اوبونتو وجود دارد. متغیرهای زیر باید در آنجا وارد شوند.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
همچنین باید NDK را از وب سایت رسمی دانلود کنید، آن را در فهرست اصلی خود باز کنید و نام آن را به NDK تغییر دهید. در مرحله بعد باید کتابخانه 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 من دانلود کنید
منبع: www.habr.com