Preparando un proyecto SDL2 para ejecutarlo en Android

Hola a todos. Hoy veremos cómo preparar un proyecto usando la biblioteca sdl2 para ejecutar el juego en Android.

Primero necesitas descargar Android Studio, instalarlo y todo lo que se requiere en este entorno de desarrollo. Por ejemplo, actualmente tengo Kde Neon y hay un archivo /etc/environment en este sistema, el mismo archivo existe en ubuntu. Allí es necesario registrar dichas variables.

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

También debe descargar el NDK del sitio oficial, descomprimirlo en su directorio de inicio y cambiarle el nombre a NDK. A continuación, debe descargar la biblioteca SDL2 del sitio. libsdl.org. Para usar sdl2 para Android es importante no compilarlo para computadora porque entonces no se compilará para Android. Para que el proyecto se compile, debe crear un proyecto en Android Studio, cualquiera, para aceptar la licencia; de lo contrario, al compilar SDL2, le solicitará una licencia.

Para leer archivos en Android desde activos, debe utilizar las funciones SDL_RWops. A continuación se muestra un ejemplo de su uso en código para trabajar con una fuente. En este caso no podemos usar FT_New_Face, sino que usaremos FT_New_Memory_Face para usar los datos ya leídos.

#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

También creé un archivo de encabezado para conectar los encabezados SDL2. Se requiere NO_SDL_GLEXT para que la compilación se realice correctamente en 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

Entonces el proyecto está listo, los sombreadores están listos para Opengl Es 3.0. Ahora necesitamos crear un proyecto de Android. Para hacer esto, descomprima el archivo SDL2. Vaya a scripts de compilación. Y lo hacemos.

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

Este mensaje aparecerá.

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

Vaya a com.xverizex.test. Vaya a com.xverizex.test/app/jni/src. Copia tu proyecto de juego. Y cambiamos el archivo Android.mk, en mi caso queda así.

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)

Como habrás notado, también incluyo la biblioteca Freetype2. Encontré uno listo para usar en github para Android, pero no funcionó, tuve que cambiar algo. También creamos el directorio app/src/main/assets. Ponemos nuestros recursos en él (fuentes, sprites, modelos 3D).

Ahora configuremos Freetype2 para Android. Descargar desde mi github Enlacey copie el directorio Freetype2 al directorio app/jni/. Todo está listo. Ahora ejecutamos el comando ./gradlew installDebug en com.xverizex.test. Para poder agregar este juego a Android, la depuración debe estar habilitada en Android. Para hacer esto, debe ir a la configuración, ir a "Sistema", ir a "Acerca de la tableta" y hacer clic en la opción "Número de compilación" unas seis veces. Luego regresa y aparecerá la opción para desarrolladores. Entramos y lo encendemos, también activamos la opción "Depuración vía USB". Ahora necesitamos conseguir la clave de la tableta. Para hacer esto, instale el programa adb. Lanzamos el adb shell en la consola y aparece una clave en la tableta que debemos aceptar. Todo, ahora los juegos se pueden descargar a la tableta.

Fuente: habr.com

Añadir un comentario