SDL2-projekti ettevalmistamine Androidil jooksutamiseks

Tere kõigile. Täna vaatame, kuidas ette valmistada projekt sdl2 raamatukogu abil mängu käivitamiseks Androidil.

Esiteks tuleb alla laadida Android Studio, installida see ja kõik, mis on vajalik selle arenduskeskkonna jaoks. Näiteks mul on praegu Kde Neon ja selles süsteemis on olemas fail /etc/environment, sarnane fail on ka Ubuntu süsteemis. Seal tuleb määrata sellised muutujad.

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

Samuti tuleb alla laadida NDK ametlikult veebisaidilt, pakkida see lahti kodukatalooge ja nimetada ümber NDK-ks. Edasi tuleb alla laadida SDL2 raamatukogu veebisaidilt libsdl.org. Et sdl2-d Androidis kasutada, on oluline mitte kompileerida seda arvutite jaoks, sest siis see ei kompileeru Androidile. Projekti kompileerimiseks tuleb luua projekt Android Studio's, ükskõik milline, et aktsepteerida litsentsi, vastasel juhul küsib SDL2 kompileerimise ajal litsentse.

Androidis failide lugemiseks varadest tuleb kasutada funktsioone SDL_RWops. Siin on näide kasutamisest koodis, mis tegeleb fontidega. Sellisel juhul ei saa me kasutada FT_New_Face'i, vaid kasutame FT_New_Memory_Face'i, et kasutada juba loetud andmeid.

#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 SDL2 peadokumendi ühendamiseks faili. NO_SDL_GLEXT on vajalik, et Androidi kompileerimine õnnestuks.

#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

Nii et projekt on valmis, varjendid on valminud Opengl Es 3.0 jaoks. Nüüd tuleb luua android-project. Selleks peaksite lahti pakkima SDL2 arhiivi. Minge build-scripts kausta ja tehke järgmist.

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

Küboge välja selline sõnum.

Seadmise ja seadme jaoks testimiseks käivitage järgmine käsk:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug

Liigume kausta com.xverizex.test. Minge kausta com.xverizex.test/app/jni/src. Kopeerige oma mängu projekt. Ja muutke faili Android.mk, minu puhul näeb see välja nii.

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

# Lisage siia oma rakenduse allikafailid...
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)

Kuidas te juba võib-olla olete märganud, ühendan veel Freetype2 teegi. Leidsin selle jaoks valmis versiooni githubist Androidi jaoks, kuid see ei töötanud, midagi tuli muuta. Loome ka kausta app/src/main/assets. Sellesse paneme meie ressursid (fondid, sprite'id, 3D mudelid).

Nüüd seadistame Freetype2 Androidi jaoks. Laadige minu githubist alla Link, ja kopeerime Freetype2 kausta app/jni/. Kõik on valmis. Nüüd käivitame com.xverizex.test käsu ./gradlew installDebug. Et seda mängu Androidis lisada, peab Androidis olema lubatud silumist. Selleks minge seadete alla, avage "Süsteem", minge "Tahvelarvuti kohta" ja klõpsake umbes kuus korda valikul "Kogumi number". Seejärel minge tagasi ja arendajate valikud peaksid ilmuma. Läheme sisse ja aktiveerime, samuti lülitame sisse "USB silumise" valiku. Nüüd tuleb tahvlile saada võti. Selleks installime adb programmi. Käivitame konsoolis adb shell, ja tahvelarvutil ilmub võti, mille tuleb aktsepteerida. Kõik, nüüd saavad mängud tahvlisse laadimiseks minna.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster