大家好 今天,我们将看到如何使用sdl2库准备项目以在android上运行游戏。
首先,您需要下载Android Studio,安装它以及该环境中开发所需的所有内容。 例如,我现在有Kde Neon,并且在此系统上有一个/ etc /环境文件,在ubuntu中存在相同的文件。 有必要注册这些变量。
ANDROID_HOME=/home/username/Android/Sdk ANDROID_NDK_HOME=/home/username/ndk
您还需要从官方网站下载NDK,将其解压缩到您的主目录中,然后将其重命名为NDK。 接下来,您需要从
libsdl.org下载SDL2库。 要在Android上使用sdl2,请务必不要在计算机上对其进行编译,因为这样就无法在android上进行编译。 为了编译项目,您需要在android studio中创建一个项目,任何人都可以接受许可证,否则,在构建SDL2时,您会要求获得许可证。
要从资产读取android中的文件,您需要使用SDL_RWops函数。 这是在字体代码中使用的示例。 在这种情况下,我们不能使用FT_New_Face,而是使用FT_New_Memory_Face来使用已经读取的数据。
#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
我还创建了一个用于连接SDL2标头的标头文件。 要使Android编译成功,需要NO_SDL_GLEXT。
#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
至此项目准备就绪,着色器已为Opengl Es 3.0准备就绪。 现在您需要创建android-project。 为此,请解压缩SDL2存档。 转到构建脚本。 我们这样做。
./androidbuild.sh com.xverizex.test main.cpp
此消息将会出现。
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
转到com.xverizex.test。 我们去com.xverizex.test / app / jni / src。 复制您的游戏项目。 我们更改了Android.mk文件,在我看来,它是这样的。
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)
您可能已经注意到,我也在连接Freetype2库。 我在github上找到了一个适用于Android的现成的,但是它没有用,我不得不更改一些东西。 还创建app / src / main / assets目录。 我们将资源(字体,子图形,3D模型)放入其中。
现在为Android配置Freetype2。 从我的github
链接下载,然后将Freetype2目录复制到app / jni /目录。 一切准备就绪。 现在运行com.xverizex.test命令./gradlew installDebug。 为了将此游戏添加到android,必须在android中启用调试功能。 为此,请转到设置,转到“系统”,转到“关于平板电脑”,然后按“内部版本号”选项约六次。 然后返回,将显示一个针对开发人员的选项。 我们进入并打开它,同时打开“ USB调试”选项。 现在,您需要获取平板电脑的密钥。 为此,请安装adb程序。 我们在控制台中启动adb shell,该密钥出现在平板电脑上,必须接受。 就是这样,现在可以将游戏下载到平板电脑上了。