移植SDL2程序到Android平台

1. 下载安装JDK

Oracle官网改版了,现在是这样的(可能需要注册账户才能下载)

移植SDL2程序到Android平台_第1张图片

2. 下载安装AndroidStudio

https://developer.android.com/studio

3. 下载安装Android SDK, 在SDK Tools里选择下载Android NDK 可能叫NDK Side by Side), USB驱动(Google USB Driver)

移植SDL2程序到Android平台_第2张图片

移植SDL2程序到Android平台_第3张图片

4. 下载SDL2源码

https://www.libsdl.org/download-2.0.php

选择source code分类的zip包

移植SDL2程序到Android平台_第4张图片

5. 解压下载后的SDL2源码,导入(import) android-project文件夹

6. 导入之后Android Studio会开始下载Gradle,索引文件等。等这些操作进行完成之后可以点 Build / Make Project 进行构建

7. 如果出现类似的错误:

Error:Execution failed for task ':app:compileDebugNdk'. > Error: Your project contains C++ files but it is not using a supported native build system. Consider using CMake or ndk-build integration with the stable Android Gradle plugin: https://developer.android.com/studio/projects/add-native-code.html or use the experimental plugin: https://developer.android.com/studio/build/experimental-plugin.html.

表明NDK未配置,选择 File / Project Structure / SDK Location

这里Android NDK location可能是未选中的,此时下拉选择Default NDK,然后OK即可.

移植SDL2程序到Android平台_第5张图片

8. 再次Build,如果出现这种错误

Error:(688) Android NDK: Module main depends on undefined modules: SDL2

表明SDL2源码未找到,此时打开管理员权限的cmd窗口,cd到android-project/app/jni下,输入

mklink /D SDL2 C:\Users\Administrator\Downloads\SDL2-2.0.12

此处后面的那个路径是SDL2源码解压后的位置,要根据实际解压位置调整。

9. 再次Build,如果出现类似这种错误:

`C:/androidprojects/SDL/app/src/main/jni/src/YourSourceHere.c', needed by `C:/androidprojects/SDL/app/build/intermediates/ndkBuild/debug/obj/local/armeabi/objs-debug/main/YourSourceHere.o'. Stop.

说明当前找不到自己项目的C/C++源码,可以简单写一份只依赖SDL2的代码放到android-project/app/jni/src下,然后打开android-project/app/jni/src/Android.mk,修改LOCAL_SRC_FILES := 刚刚放入的文件名。有多个源文件时用空格隔开.

10. 再次Build,如果出现类似这种错误:

Error:(7, 10) fatal error: 'string' file not found

说明用到C++标准库,打开android-project/app/jni/Application.mk,取消注释并修改 APP_STL := c++_shared

11. 再次Build,此时应该没有问题。如果项目中用到了C++11/14/17等内容,到 android-project/app/jni/src/Android.mk中添加 LOCAL_CPPFLAGS += -std=c++17 等类似的编译参数.

12. 找一个不常用的Android设备,链接USB数据线到电脑,开启USB Debug模式,若弹出是否允许USB调试时选择一直允许.

13. 在Android Studio上选择 Run / Run 'app',稍等后会在手机上部署应用后打开运行.

14. 如果App有用到一些素材或者文件等,在 android-project/app/src/main下新建 assets 文件夹,然后把文件放到这里,就可以在C/C++代码中直接读取或打开了.

15. 如果代码中依赖了SDL2_image库,则下载SDL2_image源码

https://www.libsdl.org/projects/SDL_image/ 选择Source中的压缩包.

解压后在管理员权限的cmd中 cd到android-project/app/jni下,输入

mklink /D SDL2_image C:\Users\Administrator\Downloads\SDL2_image-2.0.5

并在 android-project/app/jni/src/Android.mk 的 LOCAL_SHARED_LIBRARIES := 后添加 SDL2_image,在 LOCAL_C_INCLUDES := 后添加 $(LOCAL_PATH)/../SDL2_image (前提是SDL2源码和SDL2_image源码解压后的文件夹平级)

16. 此时Build应该会pass,若运行出现问题则可能还需要修改 android-project/app/src/main/java/org/libsdl/app/SDLActivity.java中 protected String[] getLibraries() 方法,把下列代码中的注释去掉:

protected String[] getLibraries() {
    return new String[] {
        "SDL2",
        // "SDL2_image",
        // "SDL2_mixer",
        // "SDL2_net",
        // "SDL2_ttf",
        "main"
    };
}

此时再 Build & Run 应该就没问题了.

移植SDL2_ttf 和 SDL2_mixer 到 Android 的步骤与 SDL2_image 类似,照猫画虎即可.

参考资料

https://lazyfoo.net/tutorials/SDL/52_hello_mobile/android_windows/index.php

https://lazyfoo.net/tutorials/SDL/53_extensions_and_changing_orientation/

你可能感兴趣的:(SDL2,SDL_image,SDL_ttf,SDL_mixer,Android)