Příprava projektu SDL2 pro spuštění na Androidu

Ahoj všem. Dnes se podíváme na to, jak připravit projekt pomocí knihovny sdl2 pro spuštění hry na androidu.

Nejprve je potřeba stáhnout Android Studio, nainstalovat ji a vše potřebné pro vývoj v tomto prostředí. Například nyní mám Kde Neon, a v tomto systému existuje soubor /etc/environment, který je obdobný jako v ubuntu. Tam je třeba zapsat následující proměnné.

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

Také je nutné stáhnout NDK z oficiálních stránek, rozbalit jej do domácího adresáře a přejmenovat na NDK. Dále je třeba stáhnout knihovnu SDL2 z webu libsdl.org. Aby bylo možné používat sdl2 na androidu, je důležité ho nekompilovat pro počítač, protože pak se to nesestaví pro android. Aby se projekt zkompiloval, je třeba vytvořit projekt v android studio, jakýkoliv, aby bylo možné přijmout licenci, jinak při sestavování SDL2 bude požadovat licenci.

Pro čtení souborů v androidu z assets je nutné použít funkce SDL_RWops. Zde je příklad použití v kódu pro práci s fonty. V tomto případě nemůžeme použít FT_New_Face, ale místo toho použijeme FT_New_Memory_Face, abychom použili již přečtená data.

#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

Také jsem vytvořil hlavičkový soubor pro připojení hlaviček SDL2. NO_SDL_GLEXT je potřeba, aby kompilace proběhla úspěšně pro 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

Takže projekt je hotový, shadery jsou připraveny pro Opengl Es 3.0. Nyní je třeba vytvořit android-project. K tomu rozbalíme archiv SDL2. Přejdeme do build-scripts. A vykonáme následující.

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

Objeví se taková zpráva.

Pro sestavení a instalaci na zařízení pro testování spusťte následující:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug

Přejdeme do com.xverizex.test. Vstoupíme do com.xverizex.test/app/jni/src. Zkopírujeme svůj projekt hry. A změníme soubor Android.mk, v mém případě to vypadá takto.

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

# Přidejte sem své soubory aplikace...
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 jste už možná zaznamenali, také připojuji knihovnu Freetype2. Už jsem našel hotovou na githubu pro android, ale nefungovala, bylo potřeba něco změnit. Také vytvoříme adresář app/src/main/assets. Do něj vložíme naše zdroje (fonty, sprite, 3D modely).

Nyní nastavíme Freetype2 pro Android. Stáhněte si z mého githubu Link, a zkopírujte adresář Freetype2 do adresáře app/jni/. Všechno je hotovo. Nyní spustíme příkaz ./gradlew installDebug v com.xverizex.test. Abychom mohli tuto hru přidat do androidu, musí být v androidu povoleno ladění. K tomu musíme přejít do nastavení, přejít na „Systém“, přejít na „O tabletu“ a stisknout asi šestkrát možnost „Číslo sestavení“. Poté se vraťte zpět a objeví se možnost pro vývojáře. Otevřeme ji a povolíme, také povolíme možnost „Ladění přes USB“. Nyní je třeba získat klíč pro tablet. K tomu nainstalujeme program adb. Spustíme v konzoli adb shell a na tabletu se objeví klíč, který je třeba přijmout. Všechno, nyní lze hry nahrávat na tablet.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster