Przygotowanie projektu SDL2 do uruchomienia na Androidzie

Cześć wszystkim. Dziś przyjrzymy się jak przygotować projekt wykorzystujący bibliotekę sdl2 do uruchomienia gry na Androidzie.

Najpierw musisz pobrać Android Studio, zainstalować je i wszystko, co jest wymagane w tym środowisku programistycznym. Na przykład mam teraz Kde Neon i w tym systemie znajduje się plik /etc/environment, ten sam plik istnieje w Ubuntu. Należy tam wprowadzić następujące zmienne.

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

Musisz także pobrać NDK z oficjalnej strony internetowej, rozpakować go do katalogu domowego i zmienić jego nazwę na NDK. Następnie musisz pobrać bibliotekę SDL2 ze strony internetowej libsdl.org. Aby użyć sdl2 dla Androida, ważne jest, aby nie kompilować go na komputer, ponieważ wtedy nie zostanie on skompilowany dla Androida. Aby projekt się skompilował, musisz stworzyć projekt w Android Studio, dowolnym, i zaakceptować licencję, w przeciwnym razie SDL2 poprosi o licencję podczas budowania.

Aby odczytać pliki w Androidzie z zasobów, musisz użyć funkcji SDL_RWops. Oto przykład użycia w kodzie pracy z czcionką. W tym przypadku nie możemy użyć FT_New_Face, ale zamiast tego użyjemy FT_New_Memory_Face do wykorzystania danych, które zostały już odczytane.

#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

Utworzyłem także plik nagłówkowy do podłączenia nagłówków SDL2. Aby kompilacja przebiegła pomyślnie na Androidzie, potrzebny jest 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

Zatem projekt jest gotowy, shadery są gotowe na Opengl Es 3.0. Teraz musimy stworzyć projekt na Androida. W tym celu rozpakuj archiwum SDL2. Przejdź do skryptów kompilacji. I robimy to w ten sposób.

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

Pojawi się następujący komunikat.

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

Przejdź do com.xverizex.test. Przejdź do com.xverizex.test/app/jni/src. Kopiujemy nasz projekt gry. I zmieniamy plik Android.mk, u mnie wygląda to 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

# 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)

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

Teraz skonfigurujmy Freetype2 dla Androida. Pobierz z mojego githuba Połączyći skopiuj katalog Freetype2 do katalogu app/jni/. Wszystko jest gotowe. Teraz uruchom komendę ./gradlew installDebug w com.xverizex.test. Aby móc dodać tę grę do systemu Android, w systemie Android musi być włączone debugowanie. Aby to zrobić, przejdź do ustawień, przejdź do „System”, przejdź do „Informacje o tablecie” i około sześć razy kliknij opcję „Numer kompilacji”. Następnie wróć i pojawi się opcja dla programistów. Wejdź i włącz go, włącz także opcję „Debugowanie USB”. Teraz musisz zdobyć klucz do tabletu. Aby to zrobić, zainstaluj program adb. Uruchamiamy powłokę adb w konsoli, a na tablecie pojawia się klucz, który należy zaakceptować. To wszystko, teraz gry można pobrać na swój tablet.

Źródło: www.habr.com

Dodaj komentarz