Hej alla. Idag ska vi titta pÄ hur man förbereder ett projekt med hjÀlp av sdl2-biblioteket för att köra ett spel pÄ Android.
Först mÄste vi ladda ner Android Studio, installera den och allt som krÀvs i denna utvecklingsmiljö. Till exempel har jag just nu Kde Neon, och i detta system finns en fil /etc/environment, samma fil finns Àven i ubuntu. DÀr mÄste vi ange följande variabler.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Vi mÄste ocksÄ ladda ner NDK frÄn den officiella webbplatsen, packa upp den i hemkatalogen och döpa om den till NDK. DÀrefter behöver vi ladda ner sdl2-biblioteket frÄn sidan . För att anvÀnda sdl2 för Android Àr det viktigt att inte kompilera det för datorn, eftersom det dÄ inte kommer att kompileras för Android. För att projektet ska kompilera mÄste vi skapa ett projekt i Android Studio, vilket som helst, för att godkÀnna licensen, annars kommer SDL2 att begÀra en licens vid kompilering.
För att lÀsa filer i Android frÄn assets behöver vi anvÀnda SDL_RWops-funktioner. HÀr Àr ett exempel pÄ anvÀndning i kod som arbetar med typsnitt. I detta fall kan vi inte anvÀnda FT_New_Face, utan istÀllet kommer vi att anvÀnda FT_New_Memory_Face för att anvÀnda redan lÀsta 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
Jag har ocksÄ skapat en headerfil för att inkludera SDL2-rubriker. NO_SDL_GLEXT behövs för att kompileringen ska lyckas för 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
SÄ projektet Àr klart, shaderarna Àr klara för OpenGL ES 3.0. Nu mÄste vi skapa android-projektet. För detta packar vi upp SDL2-arkivet. Vi gÄr in i build-scripts. Och kör sÄ hÀr.
./androidbuild.sh com.xverizex.test main.cpp
Ett meddelande som detta kommer att visas.
För att bygga och installera pÄ en enhet för testning, kör följande:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug
Vi gÄr till com.xverizex.test. GÄ in i com.xverizex.test/app/jni/src. Kopiera ditt spelprojekt. Och Àndra filen Android.mk, i mitt fall ser den ut sÄ hÀr.
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
# LÀgg till dina applikationskÀllfiler hÀr...
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)
Som du kanske redan har noterat, inkluderar jag Àven biblioteket Freetype2. Jag hittade en fÀrdig version pÄ github för android, men den fungerade inte, nÄgot behövde Àndras. Skapa ocksÄ katalogen app/src/main/assets. Dit lÀgger vi vÄra resurser (typsnitt, sprites, 3D-modeller).
Nu konfigurerar vi Freetype2 för Android. Ladda ner frÄn min github. , och kopiera katalogen Freetype2 till katalogen app/jni/. Allt Àr klart. Nu kör vi kommandot ./${client_name}.installDebug i com.xverizex.test. För att kunna lÀgga till spelet i android mÄste debug-lÀget aktiveras. GÄ till instÀllningarna, vÀlj 'System', gÄ till 'Om surfplattan' och tryck ungefÀr sex gÄnger pÄ alternativet 'Byggnummer'. GÄ tillbaka och ett alternativ för utvecklare kommer att visas. GÄ in dÀr och aktivera den samt aktivera alternativet 'USB-debbugering'. Nu mÄste vi fÄ en nyckel för surfplattan. För detta installerar vi programmet adb. Starta adb shell i konsolen, och en nyckel dyker upp pÄ surfplattan som mÄste accepteras. Klart, nu kan spel laddas ner till surfplattan.
KĂ€lla: habr.com
