Подготовка на проект 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 за андроид, важно е да не го компајлирате за компјутерот, бидејќи тогаш нема да се компајлира за андроид. За да може проектот да се компајлира, треба да креирате проект во андроид студио, било кој, за да ја прифатите лиценцата, инаку 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. Сега треба да создадеме андроид-проект. За да го направите ова, отпакувајте ја архивата 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 за андроид, но не работеше, требаше да сменам нешто. Исто така, создаваме апликација за директориуми/src/главни/средства. Во него ги сместуваме нашите ресурси (фонтови, sprites, 3D модели).

Сега да го конфигурираме Freetype2 за Android. Преземете од мојот github линк, и копирајте го директориумот Freetype2 во директориумот app/jni/. Сè е подготвено. Сега извршете ја командата ./gradlew installDebug во com.xverizex.test. За да може да ја додадете оваа игра на андроид, дебагирањето мора да биде овозможено во андроид. За да го направите ова, треба да отидете до поставките, одете во „Систем“, одете во „За таблетот“ и кликнете на опцијата „Изградба на број“ околу шест пати. Потоа вратете се назад и ќе се појави опцијата за програмери. Влезете и вклучете го, исто така вклучете ја опцијата „USB Debugging“. Сега треба да земете клуч за таблетот. За да го направите ова, инсталирајте ја програмата adb. Ја стартуваме адб школката во конзолата и во таблетот се појавува клуч што мора да се прифати. Тоа е сè, сега игрите може да се преземат на вашиот таблет.

Извор: www.habr.com

Додадете коментар