Przygotowanie projektu SDL2 do uruchomienia na Androidzie

Cześć wszystkim. Dziś przyjrzymy się, jak przygotować projekt z użyciem biblioteki SDL2 do uruchomienia gry na Androidzie.

Na początek musisz pobrać Android Studio, zainstalować je oraz wszystkie potrzebne elementy w tym środowisku do programowania. Na przykład, u mnie teraz jest Kde Neon, i w tym systemie istnieje plik /etc/environment, który jest podobny do pliku w Ubuntu. Musisz tam zdefiniować takie zmienne.

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

Musisz również pobrać NDK z oficjalnej strony, rozpakować go w katalogu domowym i zmienić nazwę na NDK. Następnie pobierz bibliotekę SDL2 ze strony libsdl.org. Aby używać SDL2 na Androidzie, ważne jest, aby nie kompilować go dla komputera, ponieważ wtedy nie skompiluje się dla Androida. Aby projekt został skompilowany, musisz stworzyć dowolny projekt w Android Studio, aby zaakceptować licencję, w przeciwnym razie przy kompilacji SDL2 poprosi o licencję.

Aby odczytywać pliki w Androidzie z katalogu assets, musisz używać funkcji SDL_RWops. Oto przykład użycia w kodzie związanym z obsługą czcionek. W tym przypadku nie możemy użyć FT_New_Face, zamiast tego użyjemy FT_New_Memory_Face, aby wykorzystać już odczytane dane.

#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

Stworzyłem również plik nagłówkowy do dołączenia nagłówków SDL2. NO_SDL_GLEXT jest potrzebny, aby kompilacja zakończyła się pomyślnie dla Androida.

#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

Zatem projekt jest gotowy, shadery są gotowe do OpenGL ES 3.0. Teraz musisz stworzyć android-project. W tym celu rozpakowujemy archiwum SDL2. Wchodzimy do build-scripts. I wykonujemy tak.

./androidbuild.sh com.xverizex.test main.cpp

Pojawi się taki komunikat.

Aby zbudować i zainstalować na urządzeniu do testowania, uruchom następujące polecenie:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug

Przechodzimy do com.xverizex.test. Wchodzimy do com.xverizex.test/app/jni/src. Kopiujemy swój projekt gry. I zmieniamy plik Android.mk, w moim przypadku wygląda on tak.

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

# Dodaj tutaj swoje pliki źródłowe aplikacji...
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)

Jak zapewne już zauważyłeś, podłączam dodatkowo bibliotekę Freetype2. Znalazłem gotową na githubie dla Androida, ale nie działała, trzeba było coś zmienić. Tworzymy także katalog app/src/main/assets. Umieszczamy w nim nasze zasoby (czcionki, sprite'y, modele 3D).

Teraz skonfigurujemy Freetype2 dla Androida. Pobierz z mojego githuba Link, a następnie skopiuj katalog Freetype2 do katalogu app/jni/. Wszystko gotowe. Teraz uruchamiamy w com.xverizex.test polecenie ./gradlew installDebug. Aby dodać tę grę do Androida, musi być włączona opcja debugowania. W tym celu przechodzimy do ustawień, przechodzimy do „System”, następnie do „O tablecie” i naciskamy około sześciu razy opcję „Numer kompilacji”. Potem wracamy wstecz i pojawi się opcja dla deweloperów. Wchodzimy tam i włączamy, włączamy także opcję „Debugowanie przez USB”. Teraz musimy uzyskać klucz dla tabletu. W tym celu instalujemy program adb. Uruchamiamy w konsoli adb shell, a na tablecie pojawia się klucz, który należy zaakceptować. To wszystko, teraz gry można ładować na tablet.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster