أهلاً بكم. سنرى اليوم كيفية إعداد مشروع باستخدام مكتبة sdl2 لتشغيل اللعبة على android.
تحتاج أولاً إلى تنزيل Android Studio وتثبيته وكل ما هو مطلوب في بيئة التطوير هذه. على سبيل المثال ، لدي حاليًا Kde Neon ، وهناك ملف / etc / بيئة على هذا النظام ، نفس الملف موجود في ubuntu. هناك لا بد من تسجيل مثل هذه المتغيرات.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
تحتاج أيضًا إلى تنزيل NDK من الموقع الرسمي ، وفك ضغطه إلى دليل منزلك وإعادة تسميته إلى NDK. بعد ذلك ، تحتاج إلى تنزيل مكتبة 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. الآن نحن بحاجة إلى إنشاء مشروع android. للقيام بذلك ، قم بفك ضغط أرشيف 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. لقد وجدت واحدة جاهزة على جيثب لنظام أندرويد ، لكنها لم تنجح ، واضطررت إلى تغيير شيء ما. نقوم أيضًا بإنشاء دليل app / src / main / الأصول. نضع مواردنا فيه (خطوط ، نقوش متحركة ، نماذج ثلاثية الأبعاد).
لنقم الآن بإعداد Freetype2 لنظام Android. تنزيل من جيثب الخاص بي
المصدر: www.habr.com