Een SDL2-project voorbereiden voor uitvoering op Android

Dag Allemaal. Vandaag zullen we bekijken hoe we een project kunnen voorbereiden met behulp van de sdl2-bibliotheek om een ​​game op Android uit te voeren.

Eerst moet je Android Studio downloaden, installeren en alles wat nodig is in deze ontwikkelomgeving. Ik heb nu bijvoorbeeld Kde Neon en op dit systeem staat een bestand /etc/environment, hetzelfde bestand bestaat in ubuntu. De volgende variabelen moeten daar worden ingevoerd.

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

U moet NDK ook downloaden van de officiΓ«le website, het uitpakken in uw thuismap en de naam ervan wijzigen in NDK. Vervolgens moet u de SDL2-bibliotheek downloaden van de website libsdl.org. Om sdl2 voor Android te gebruiken, is het belangrijk om het niet voor de computer te compileren, omdat het dan niet voor Android compileert. Om het project te kunnen compileren, moet je een project maken in Android Studio, wie dan ook, om de licentie te accepteren, anders zal SDL2 tijdens het bouwen om een ​​licentie vragen.

Om bestanden in Android uit assets te lezen, moet je de SDL_RWops-functies gebruiken. Hier is een voorbeeld van gebruik in code voor het werken met een lettertype. In dit geval kunnen we FT_New_Face niet gebruiken, maar zullen we in plaats daarvan FT_New_Memory_Face gebruiken om de gegevens te gebruiken die al zijn gelezen.

#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

Ik heb ook een headerbestand gemaakt om SDL2-headers aan te sluiten. Er is NO_SDL_GLEXT nodig om de compilatie op Android te laten slagen.

#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

Het project is dus klaar, de shaders zijn klaar voor Opengl Es 3.0. Nu moeten we een Android-project maken. Om dit te doen, pakt u het SDL2-archief uit. Ga naar build-scripts. En wij doen het zo.

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

Het volgende bericht verschijnt.

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

Ga naar com.xverizex.test. Ga naar com.xverizex.test/app/jni/src. We kopiΓ«ren ons spelproject. En we veranderen het Android.mk-bestand, in mijn geval ziet het er zo uit.

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)

Zoals je misschien al hebt gemerkt, neem ik ook de Freetype2-bibliotheek op. Ik vond een kant-en-klaar exemplaar op github voor Android, maar het werkte niet, ik moest iets veranderen. We maken ook een directory app/src/main/assets. We plaatsen onze bronnen erin (lettertypen, sprites, 3D-modellen).

Laten we nu Freetype2 voor Android configureren. Downloaden vanaf mijn github Linken kopieer de map Freetype2 naar de map app/jni/. Alles is klaar. Voer nu de opdracht ./gradlew installDebug uit in com.xverizex.test. Om dit spel aan Android toe te kunnen voegen, moet foutopsporing in Android zijn ingeschakeld. Om dit te doen, moet je naar de instellingen gaan, naar "Systeem" gaan, naar "Over de tablet" gaan en ongeveer zes keer op de optie "Buildnummer" klikken. Ga dan terug en de optie voor ontwikkelaars verschijnt. Ga naar binnen en schakel het in, schakel ook de optie "USB-foutopsporing" in. Nu heb je een sleutel voor de tablet nodig. Installeer hiervoor het adb-programma. We lanceren de adb-shell in de console en er verschijnt een sleutel in de tablet die moet worden geaccepteerd. Dat is alles, nu kunnen games naar uw tablet worden gedownload.

Bron: www.habr.com

Voeg een reactie