Сайн уу. Өнөөдөр бид Android дээр тоглоом ажиллуулахын тулд sdl2 номын санг ашиглан төсөл хэрхэн бэлтгэх талаар авч үзэх болно.
Эхлээд та Android Studio-г татаж аваад суулгаж, энэ хөгжүүлэлтийн орчинд шаардлагатай бүх зүйлийг суулгах хэрэгтэй. Жишээлбэл, надад одоо Kde Neon байгаа бөгөөд энэ систем дээр /etc/environment гэсэн файл байгаа бөгөөд 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 толгойг холбох толгой файл үүсгэсэн. 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-д бэлэн боллоо. Одоо бид 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 номын санг оруулж байна. Би Android-д зориулсан github дээр бэлэн нэгийг олсон боловч энэ нь ажиллахгүй байсан тул би ямар нэг зүйлийг өөрчлөх шаардлагатай болсон. Мөн бид лавлах апп/src/main/assets үүсгэдэг. Бид үүнд нөөцөө байрлуулдаг (фонт, спрайт, 3D загвар).
Одоо Android-д зориулсан Freetype2-г тохируулцгаая. Миний github-аас татаж аваарай
Эх сурвалж: www.habr.com