Saluton al ĉiuj. Hodiaŭ ni vidos kiel prepari projekton uzante la sdl2-bibliotekon por ruli la ludon en Android.
Unue vi devas elŝuti Android Studio, instali ĝin kaj ĉion, kio necesas en ĉi tiu evolumedio. Ekzemple, mi nuntempe havas Kde Neon, kaj estas /etc/environment-dosiero en ĉi tiu sistemo, la sama dosiero ekzistas en ubuntu. Tie necesas registri tiajn variablojn.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
Vi ankaŭ devas elŝuti la NDK de la oficiala retejo, malzipi ĝin al via hejma dosierujo kaj renomi ĝin al NDK. Poste, vi devas elŝuti la SDL2-bibliotekon de la retejo
Por legi dosierojn en Android de aktivoj, vi devas uzi la funkciojn SDL_RWops. Jen ekzemplo de uzado de ĝi en kodo por labori kun tiparo. En ĉi tiu kazo, ni ne povas uzi FT_New_Face, sed anstataŭe ni uzos FT_New_Memory_Face por uzi la datumojn jam legitajn.
#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
Ankaŭ mi kreis kapdosieron por konekti SDL2-kapojn. NO_SDL_GLEXT estas bezonata por ke kompilo sukcesu por 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
Do la projekto estas preta, ombriloj estas pretaj por Opengl Es 3.0. Nun ni devas krei android-projekton. Por fari tion, malpaku la arkivon SDL2. Iru al konstru-skriptoj. Kaj ni faras tion.
./androidbuild.sh com.xverizex.test main.cpp
Ĉi tiu mesaĝo aperos.
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
Iru al com.xverizex.test. Iru al com.xverizex.test/app/jni/src. Kopiu vian ludprojekton. Kaj ni ŝanĝas la Android.mk-dosieron, en mia kazo ĝi aspektas tiel.
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)
Kiel vi eble rimarkis, mi ankaŭ inkluzivas la bibliotekon Freetype2. Mi trovis pretan en github por android, sed ĝi ne funkciis, mi devis ŝanĝi ion. Ni ankaŭ kreas la dosierujon app/src/main/assets. Ni metas niajn rimedojn en ĝi (tiparoj, sprites, 3d-modeloj).
Nun ni agordu Freetype2 por Android. Elŝutu el mia github
fonto: www.habr.com