Salutare tuturor. Astăzi vom analiza cum să pregătiți un proiect folosind biblioteca sdl2 pentru a rula un joc pe Android.
Mai întâi trebuie să descărcați Android Studio, să îl instalați și tot ce este necesar în acest mediu de dezvoltare. De exemplu, acum am Kde Neon, iar pe acest sistem există un fișier /etc/environment, același fișier există în ubuntu. Următoarele variabile trebuie introduse acolo.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
De asemenea, trebuie să descărcați NDK de pe site-ul oficial, să îl despachetați în directorul dvs. de acasă și să îl redenumiți în NDK. Apoi, trebuie să descărcați biblioteca SDL2 de pe site
Pentru a citi fișiere din Android din active, trebuie să utilizați funcțiile SDL_RWops. Iată un exemplu de utilizare în cod pentru a lucra cu un font. În acest caz, nu putem folosi FT_New_Face, ci vom folosi FT_New_Memory_Face pentru a folosi datele care au fost deja citite.
#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
De asemenea, am creat un fișier antet pentru a conecta antetele SDL2. NO_SDL_GLEXT este necesar pentru ca compilarea să aibă succes pe 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
Deci proiectul este gata, shaders-urile sunt gata pentru Opengl Es 3.0. Acum trebuie să creăm un proiect Android. Pentru a face acest lucru, despachetați arhiva SDL2. Accesați scripturi de compilare. Și o facem așa.
./androidbuild.sh com.xverizex.test main.cpp
Va apărea următorul mesaj.
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
Accesați com.xverizex.test. Accesați com.xverizex.test/app/jni/src. Copiem proiectul nostru de joc. Și schimbăm fișierul Android.mk, în cazul meu arată așa.
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)
După cum probabil ați observat deja, includ și biblioteca Freetype2. Am găsit unul gata făcut pe github pentru Android, dar nu a funcționat, trebuia să schimb ceva. De asemenea, creăm un director app/src/main/assets. Ne plasăm resursele în el (fonturi, sprites, modele 3D).
Acum să configuram Freetype2 pentru Android. Descărcați de pe github-ul meu
Sursa: www.habr.com