Pregătirea proiectului SDL2 pentru rulare pe Android

Salut tuturor. Astăzi vom vedea cum să pregătim un proiect folosind biblioteca sdl2 pentru a lansa un joc pe Android.

Mai întâi trebuie să descărcați Android Studio, să o instalați și tot ce este necesar în acest mediu pentru dezvoltare. De exemplu, eu am acum Kde Neon, iar în acest sistem există fișierul /etc/environment, un fișier similar există și în Ubuntu. Acolo trebuie să adăugați următoarele variabile.

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 dezarhivați în directorul personal și să-l redenumiți în NDK. Apoi, trebuie să descărcați biblioteca SDL2 de pe site-ul libsdl.org. Pentru a utiliza sdl2 pentru Android, este important să nu-l compilați pentru calculator, deoarece atunci nu se va compila pentru Android. Pentru ca proiectul să fie compilat, trebuie să creați un proiect în Android Studio, orice, pentru a accepta licența, altfel, la compilarea SDL2, va solicita licența.

Pentru a citi fișiere în Android din assets, trebuie să folosiți funcțiile SDL_RWops. Iată un exemplu de utilizare în cod pentru gestionarea fonturilor. În acest caz, nu putem folosi FT_New_Face, ci în locul acestuia vom folosi FT_New_Memory_Face pentru a utiliza datele 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 header pentru a include header-urile SDL2. NO_SDL_GLEXT este necesar pentru ca compilarea să decurgă cu succes pentru 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, shader-urile sunt gata pentru OpenGL ES 3.0. Acum trebuie să creați android-project. Pentru aceasta, dezarhivați arhiva SDL2. Accesați build-scripts. Și executați așa.

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

Va apărea un mesaj de acest fel.

Pentru a construi și a instala pe un dispozitiv pentru testare, rulați următoarele:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug

Accesați com.xverizex.test. Mergem în com.xverizex.test/app/jni/src. Copiați proiectul dvs. de joc. Și modificați fișierul Android.mk, în cazul meu arată astfel.

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

# Adăugați fișierele sursă ale aplicației aici...
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 ați observat deja, includ și biblioteca Freetype2. Am găsit una deja gata pe github pentru Android, dar nu a funcționat, a fost necesar să schimb ceva. De asemenea, creăm directorul app/src/main/assets. Acolo punem resursele noastre (fonturi, sprite-uri, modele 3D).

Acum vom configura Freetype2 pentru Android. Descarcă de pe github-ul meu Link, și copiem catalogul Freetype2 în catalogul app/jni/. Totul este gata. Acum rulăm comanda ../gradlew installDebug în com.xverizex.test. Pentru a putea adăuga acest joc în Android, trebuie să fie activată depanarea. Pentru aceasta, mergi la setări, apoi la „Sistem”, urmează „Despre tabletă” și apasă de aproximativ șase ori pe opțiunea „Număr de compilare”. Apoi, întoarce-te înapoi și va apărea opțiunea pentru dezvoltatori. Accesează și activează, de asemenea, activează opțiunea „Depanare USB”. Acum trebuie să obținem cheia pentru tabletă. Pentru aceasta, instalăm programul adb. Lansează în consolă adb shell, iar pe tabletă apare o cheie pe care trebuie să o accepți. Totul, acum jocurile pot fi încărcate pe tabletă.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster