Preparación de un proyecto SDL2 para ejecutar en Android

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

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

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

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

Para leer archivos en Android desde activos, debe usar las funciones SDL_RWops. Aquí hay un ejemplo de uso en el código de 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: %s\n", 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 encabezados SDL2. NO_SDL_GLEXT es necesario para que la compilación sea exitosa para 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 necesitas crear un proyecto de Android. Para hacer esto, descomprima el archivo SDL2. Ir a los scripts de compilación. Y lo hacemos así.

 ./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. Vamos a com.xverizex.test / app / jni / src. Copia tu proyecto de juego. Y cambiamos el archivo Android.mk, en mi caso se ve 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 estoy conectando la biblioteca Freetype2. Encontré uno listo para usar en Github para Android, pero no funcionó, tuve que cambiar algo. También cree el directorio app / src / main / assets. Ponemos nuestros recursos en él (fuentes, sprites, modelos 3d).

Ahora configure Freetype2 para Android. Descargue desde mi github Link y copie el directorio Freetype2 en el directorio app / jni /. Todo esta listo. Ahora ejecute el comando com.xverizex.test ./gradlew installDebug. Para agregar este juego a Android, la depuración debe estar habilitada en Android. Para hacer esto, vaya a la configuración, vaya a "Sistema", vaya a "Acerca de la tableta" y presione la opción "Número de compilación" unas seis veces. Luego regrese y aparecerá una opción para desarrolladores. Entramos y lo activamos, también activamos la opción "Depuración de USB". Ahora necesita obtener la clave de la tableta. Para hacer esto, instale el programa adb. Lanzamos adb shell en la consola, y la clave aparece en la tableta, que debe ser aceptada. Eso es todo, ahora los juegos se pueden descargar a la tableta.

Source: https://habr.com/ru/post/484526/


All Articles