Preparante SDL2-projekton por funkcii per Android

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 libsdl.org. Por uzi sdl2 por androide gravas ne kompili ĝin por komputilo ĉar tiam ĝi ne kompilos por android. Por ke la projekto kompilu, vi devas krei projekton en android studio, iu ajn, por akcepti la permesilon, alie dum konstruado de SDL2 ĝi petos permesilon.

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 ligilo, kaj kopiu la dosierujon Freetype2 al la dosierujo app/jni/. Ĉio estas preta. Nun ni rulas la komandon ./gradlew installDebug en com.xverizex.test. Por povi aldoni ĉi tiun ludon al Androido, sencimigado devas esti ebligita en Android. Por fari tion, vi devas iri al la agordoj, iru al "Sistemo", iru al "Pri tablojdo" kaj alklaku la opcion "Konstruu nombro" ĉirkaŭ ses fojojn. Tiam reiru kaj aperos la opcio por programistoj. Ni eniras kaj ŝaltas ĝin, ankaŭ ŝaltas la opcion "Elpurigado per USB". Nun ni devas akiri la ŝlosilon por la tablojdo. Por fari tion, instalu la programon adb. Ni lanĉas la adb-ŝelon en la konzolo, kaj klavo aperas sur la tablojdo, kiu devas esti akceptita. Ĉio, nun la ludoj povas elŝuti al la tablojdo.

fonto: www.habr.com

Aldoni komenton