SDL2 projekti ettevalmistamine Androidis käitamiseks

Tere kõigile. Täna näeme, kuidas sdl2 teegi abil projekti ette valmistada, et mäng Androidis käitada.

Esmalt tuleb alla laadida Android Studio, installida see ja kõik, mis selles arenduskeskkonnas nõutav. Näiteks praegu on mul Kde Neon ja selles süsteemis on fail /etc/environment, sama fail on olemas ka ubuntus. Seal on vaja sellised muutujad registreerida.

ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk

Samuti peate NDK ametlikult saidilt alla laadima, lahti pakkima oma kodukataloogi ja nimetama ümber NDK-ks. Järgmisena peate saidilt alla laadima SDL2 teegi libsdl.org. Androidi jaoks sdl2 kasutamiseks on oluline mitte kompileerida seda arvuti jaoks, sest siis see ei kompileeri androidi jaoks. Projekti koostamiseks peate litsentsi vastuvõtmiseks looma android stuudios projekti, mis tahes, vastasel juhul küsib see SDL2 ehitamisel litsentsi.

Androidis failide lugemiseks varadest peate kasutama SDL_RWopsi funktsioone. Siin on näide selle kasutamisest koodis fondiga töötamiseks. Sel juhul ei saa me kasutada FT_New_Face, kuid selle asemel kasutame juba loetud andmete kasutamiseks FT_New_Memory_Face.

#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

Samuti lõin päisefaili SDL2 päiste ühendamiseks. Androidi jaoks koostamise õnnestumiseks on vaja NO_SDL_GLEXT.

#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

Seega on projekt valmis, varjutajad Opengl Es 3.0 jaoks valmis. Nüüd peame looma android-projekti. Selleks pakkige arhiiv SDL2 lahti. Minge ehitusskriptide juurde. Ja me teeme seda.

./androidbuild.sh com.xverizex.test main.cpp

See teade ilmub.

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

Minge saidile com.xverizex.test. Minge aadressile com.xverizex.test/app/jni/src. Kopeerige oma mänguprojekt. Ja me muudame faili Android.mk, minu puhul näeb see välja selline.

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)

Nagu olete märganud, lisan ka Freetype2 teegi. Leidsin githubist androidile valmis, aga see ei töötanud, pidin midagi muutma. Samuti loome kataloogi app/src/main/assets. Me paneme sellesse oma ressursid (fondid, spraidid, 3D-mudelid).

Nüüd seadistame Androidi jaoks Freetype2. Laadige alla minu githubist on siinja kopeerige Freetype2 kataloog kataloogi app/jni/. Kõik on valmis. Nüüd käivitame failis com.xverizex.test käsu ./gradlew installDebug. Selle mängu androidile lisamiseks peab androidis olema lubatud silumine. Selleks peate minema seadetesse, minema jaotisse "Süsteem", minge jaotisse "Teave tahvelarvuti kohta" ja klõpsama umbes kuus korda valikut "Ehitamise number". Seejärel minge tagasi ja ilmub arendajatele mõeldud valik. Me läheme sisse ja lülitame selle sisse, samuti lülitame sisse valiku "Silumine USB kaudu". Nüüd peame saama tahvelarvuti võtme. Selleks installige programm adb. Käivitame konsoolis adb-kesta ja tahvelarvutile ilmub võti, mis tuleb aktsepteerida. Kõik, nüüd saab mänge tahvelarvutisse alla laadida.

Allikas: www.habr.com

Lisa kommentaar