SDL2 proiektu bat prestatzen Android-en exekutatzeko

Kaixo guztioi. Gaur Android-en joko bat exekutatzeko sdl2 liburutegia erabiliz proiektu bat nola prestatu aztertuko dugu.

Lehenik eta behin Android Studio deskargatu behar duzu, instalatu eta garapen-ingurune honetan behar den guztia. Adibidez, orain Kde Neon daukat, eta sistema honetan /etc/environment fitxategi bat dago, fitxategi bera dago ubuntu-n. Bertan honako aldagaiak sartu behar dira.

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

NDK webgune ofizialetik ere deskargatu behar duzu, zure etxeko direktorioan deskonprimitu eta NDK izena aldatu behar duzu. Ondoren, SDL2 liburutegia deskargatu behar duzu webgunetik libsdl.org. Androiderako sdl2 erabiltzeko, garrantzitsua da ordenagailurako ez konpilatzea, orduan ez baita Androiderako konpilatuko. Proiektua konpilatu ahal izateko, proiektu bat sortu behar duzu Android estudioan, edozeinek, lizentzia onartzeko, bestela SDL2-k lizentzia eskatuko du eraikitzerakoan.

Android-eko fitxategiak aktiboetatik irakurtzeko, SDL_RWops funtzioak erabili behar dituzu. Hona hemen letra-tipo batekin lan egiteko kodean erabiltzeko adibide bat. Kasu honetan, ezin dugu FT_New_Face erabili, baizik eta FT_New_Memory_Face erabiliko dugu dagoeneko irakurritako datuak erabiltzeko.

#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

Goiburu-fitxategi bat ere sortu dut SDL2 goiburuak konektatzeko. NO_SDL_GLEXT behar da konpilazioak Android-en arrakasta izan dezan.

#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

Beraz, proiektua prest dago, itzalak Opengl Es 3.0rako prest daude. Orain Android-proiektu bat sortu behar dugu. Horretarako, deskonpaktatu SDL2 artxiboa. Joan build-scripts-era. Eta horrela egiten dugu.

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

Ondorengo mezua agertuko da.

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

Joan com.xverizex.test-era. Joan com.xverizex.test/app/jni/src helbidera. Gure jokoaren proiektua kopiatzen dugu. Eta Android.mk fitxategia aldatzen dugu, nire kasuan honelakoa da.

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)

Dagoeneko ohartuko zinetenez, Freetype2 liburutegia ere sartzen dut. Github-en Androiderako prest egindako bat aurkitu nuen, baina ez zuen funtzionatu, zerbait aldatu behar nuen. App/src/main/assets direktorioa ere sortzen dugu. Gure baliabideak bertan jartzen ditugu (letra-tipoak, sprites, 3D ereduak).

Orain konfigura dezagun Freetype2 Androiderako. Deskargatu nire github-etik Link, eta kopiatu Freetype2 direktorioa app/jni/ direktoriora. Dena prest dago. Orain exekutatu ./gradlew installDebug komandoa com.xverizex.test-en. Joko hau Android-era gehitu ahal izateko, arazketa gaituta egon behar da Android-en. Horretarako, ezarpenetara joan, "Sistema"ra joan, "Tabletari buruz" atalera eta egin klik sei bat aldiz "Eraiki zenbakia" aukeran. Gero atzera egin eta garatzaileentzako aukera agertuko da. Sartu eta piztu ezazu, "USB arazketa" aukera ere aktibatu. Orain tabletaren giltza lortu behar duzu. Horretarako, instalatu adb programa. Adb shell-a abiarazten dugu kontsolan, eta onartu beharreko gako bat agertzen da tabletan. Hori da, orain jokoak deskargatu daitezke zure tabletan.

Iturria: www.habr.com

Gehitu iruzkin berria