Android дээр ажиллах SDL2 төслийг бэлтгэж байна

Сайн уу. Өнөөдөр бид Android дээр тоглоом ажиллуулахын тулд sdl2 номын санг ашиглан төсөл хэрхэн бэлтгэх талаар авч үзэх болно.

Эхлээд та Android Studio-г татаж аваад суулгаж, энэ хөгжүүлэлтийн орчинд шаардлагатай бүх зүйлийг суулгах хэрэгтэй. Жишээлбэл, надад одоо Kde Neon байгаа бөгөөд энэ систем дээр /etc/environment гэсэн файл байгаа бөгөөд ubuntu дээр ч мөн адил файл байдаг. Тэнд дараах хувьсагчдыг оруулах шаардлагатай.

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

Та мөн 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 толгойг холбох толгой файл үүсгэсэн. 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-аас татаж аваарай Холбоос, Freetype2 санг app/jni/ лавлах руу хуулна уу. Бүгд бэлэн. Одоо com.xverizex.test дээр ./gradlew installDebug командыг ажиллуулна уу. Энэ тоглоомыг Android-д нэмэхийн тулд Android-д дибаг хийхийг идэвхжүүлсэн байх ёстой. Үүнийг хийхийн тулд та тохиргоо руу орж, "Систем" руу очиж, "Таблетийн тухай" хэсэгт очоод "Бүтээлийн дугаар" сонголтыг зургаан удаа дарна уу. Дараа нь буцаж очоод хөгжүүлэгчдэд зориулсан сонголт гарч ирнэ. Ороод үүнийг асаана уу, мөн "USB дибаг хийх" сонголтыг идэвхжүүлнэ үү. Одоо та таблетын түлхүүрийг авах хэрэгтэй. Үүнийг хийхийн тулд adb програмыг суулгана уу. Бид консол дээр adb shell-ийг ажиллуулж, таблет дээр хүлээн авах ёстой түлхүүр гарч ирнэ. Энэ бол одоо тоглоомуудыг таблет дээрээ татаж авах боломжтой.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх