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
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
Bron: www.habr.com