Підготовка SDL2-проекту для запуску на Android

Всім привіт. Сьогодні ми подивимося, як підготувати проект з використанням бібліотеки sdl2 для запуску гри на android.

Для початку треба скачати Android Studio, встановити її і все, що потрібно в цьому середовищі для розробки. Наприклад, у мене зараз Kde Neon, і в цій системі існує файл /etc/environment, такий же файл є і в ubuntu. Там треба прописати такі змінні.

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

Також треба завантажити NDK з офіційного сайту, щоб розпакувати його в домашній каталог і перейменувати в NDK. Далі потрібно завантажити бібліотеку SDL2 із сайту libsdl.org. Щоб використовувати sdl2 для android, важливо не компілювати його для комп'ютера, тому що тоді це не скомпілюється для android. Щоб проект скомпілювався, треба створити проект в android studio, будь-який, щоб прийняти ліцензію, інакше при складанні SDL2 проситиме ліцензію.

Щоб зчитувати файли в Android з assets, потрібно використовувати функції 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 для android, але вона не працювала, потрібно було щось змінити. Також створюємо каталог app/src/main/assets. У нього розміщуємо наші ресурси (шрифти, спрайти, 3d модельки).

Тепер налаштуємо Freetype2 для Android. Завантажуємо з мого github посилання, і копіюємо каталог Freetype2 до каталогу app/jni/. Все готово. Тепер запускаємо у com.xverizex.test команду ./gradlew installDebug. Щоб можна було додати в android цю гру, android повинна бути включена налагодження. Для цього потрібно перейти в налаштування, перейти до «Системи», перейти в «Про планшет» і натиснути близько шести разів опцію «Номер складання». Потім перейти назад і з'явиться опція для розробників. Заходимо і включаємо, також включаємо опцію «Налагодження USB». Тепер потрібно одержати ключ для планшета. Для цього встановлюємо програму adb. Запускаємо в консолі adb shell і в планшеті з'являється ключ, який треба прийняти. Тепер ігри можна завантажувати на планшет.

Джерело: habr.com

Додати коментар або відгук