Pregătirea unui proiect SDL2 pentru a rula pe Android

Salutare tuturor. Astăzi vom analiza cum să pregătiți un proiect folosind biblioteca sdl2 pentru a rula un joc pe Android.

Mai întâi trebuie să descărcați Android Studio, să îl instalați și tot ce este necesar în acest mediu de dezvoltare. De exemplu, acum am Kde Neon, iar pe acest sistem există un fișier /etc/environment, același fișier există în ubuntu. Următoarele variabile trebuie introduse acolo.

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 despachetați în directorul dvs. de acasă și să îl redenumiți în NDK. Apoi, trebuie să descărcați biblioteca SDL2 de pe site libsdl.org. Pentru a utiliza sdl2 pentru Android, este important să nu îl compilați pentru computer, deoarece atunci nu se va compila pentru Android. Pentru ca proiectul să fie compilat, trebuie să creați un proiect în Android Studio, oricare, pentru a accepta licența, altfel SDL2 va cere o licență la construirea.

Pentru a citi fișiere din Android din active, trebuie să utilizați funcțiile SDL_RWops. Iată un exemplu de utilizare în cod pentru a lucra cu un font. În acest caz, nu putem folosi FT_New_Face, ci vom folosi FT_New_Memory_Face pentru a folosi datele care au fost 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 antet pentru a conecta antetele SDL2. NO_SDL_GLEXT este necesar pentru ca compilarea să aibă succes pe 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, shaders-urile sunt gata pentru Opengl Es 3.0. Acum trebuie să creăm un proiect Android. Pentru a face acest lucru, despachetați arhiva SDL2. Accesați scripturi de compilare. Și o facem așa.

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

Va apărea următorul mesaj.

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

Accesați com.xverizex.test. Accesați com.xverizex.test/app/jni/src. Copiem proiectul nostru de joc. Și schimbăm fișierul Android.mk, în cazul meu arată așa.

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)

După cum probabil ați observat deja, includ și biblioteca Freetype2. Am găsit unul gata făcut pe github pentru Android, dar nu a funcționat, trebuia să schimb ceva. De asemenea, creăm un director app/src/main/assets. Ne plasăm resursele în el (fonturi, sprites, modele 3D).

Acum să configuram Freetype2 pentru Android. Descărcați de pe github-ul meu Linkși copiați directorul Freetype2 în directorul app/jni/. Totul este gata. Acum rulați comanda ./gradlew installDebug în com.xverizex.test. Pentru a putea adăuga acest joc pe Android, depanarea trebuie să fie activată în Android. Pentru a face acest lucru, trebuie să mergeți la setări, să accesați „Sistem”, să mergeți la „Despre tabletă” și să faceți clic pe opțiunea „Număr de compilare” de aproximativ șase ori. Apoi reveniți și va apărea opțiunea pentru dezvoltatori. Intră și pornește-l, activează și opțiunea „Depanare USB”. Acum trebuie să obțineți o cheie pentru tabletă. Pentru a face acest lucru, instalați programul adb. Lansăm adb shell în consolă, iar în tabletă apare o cheie care trebuie acceptată. Gata, acum jocurile pot fi descărcate pe tabletă.

Sursa: www.habr.com

Adauga un comentariu