/rust_sdl2_android_template

build rust_sdl2 with features to android easily

Primary LanguageJava

rust sdl2 with android template

English

rust_sdl2是一个非常好用的库,只需要依赖它一个库,并且使用ttfimage等feature,就可以方便地使用到这些功能,在桌面平台可以非常方便地编译运行。

同时,在没使用这些feature的情况下,参考这个博客和SDL仓库中的这个说明,我们也很容易地可以跑通安卓流程。

但是使用这些feature的情况下,在安卓上就很容易出现运行时加载不到SDL_image库中的函数之类的问题,或者要不然rust编译链接的时候就已经失败了。

因此我做了这个模板。希望能帮助到所有人。

思路和原理

本章节不含任何操作步骤,讲述的是思路。

工程结构

gamelib是一个库项目,desktop是简单的入口,用于桌面端直接编译运行。拆分是因为安卓工程需要把整个rust程序编译成libmain.so作为入口。

SDLSDL_image是sdl和其他插件库的源码。用于给安卓studio编译对应的so,同时我们rust编译libmain.so的时候也需要这些so。

android-projectSDL的一部分。由于我使用了git submodule,并且工程我们需要本地修改,我直接把android_project复制出来了。

assets是资源路径,存放我们的资源。

android-project中有几个符号链接:

  1. app/jni/SDL -> SDL
  2. app/jni/SDL_image -> SDL_image
  3. app/src/main/assets/assets -> assets

这些符号链接都是为了避免复制重复资源。

如果还要使用别的feature,例如ttf,那需要新增submodule,并且也增加对应的符号链接。

安卓工程配置

android-project/build.gradle中,注释了所有的ndkBuild,换成了cmake配置。如果你会配ndkbuild,那么可以改回去用那个配置。 在android-project/app/jni/CMakeLists.txt中,注释了最后的add_subdirectory(src),因为我们不需要c++的入口代码。

如果直接使用这个模板

本章节包含操作步骤。当前版本全是在windows下测试

本例子安卓只包含arm64-v8a目标,其他目标请如法炮制

需要的工具和工具初始化

  1. 请自行安装各种工具:

如果你只跑桌面端,那么以下工具不需要配置,直接跳转到git工程操作

  1. 给rust增加编译目标
rustup target add aarch64-linux-android

git工程操作

  1. 拉取项目
git clone XXX
cd XXX

如果你只跑桌面端,那么这里可以直接cargo run运行了,后面都不用看。

  1. 初始化子模块
git submodule update --init --recursive

安卓第一次编译

假设你的安卓studio已经配置好了各种sdk,ndk,cmake之类的。

打开安卓studio,打开工程android-project,直接点右上角的锤子图标(构建),这里期待会直接构建成功。