1. 下载安装JDK
Oracle官网改版了,现在是这样的(可能需要注册账户才能下载)
2. 下载安装AndroidStudio
https://developer.android.com/studio
3. 下载安装Android SDK, 在SDK Tools里选择下载Android NDK 可能叫NDK Side by Side), USB驱动(Google USB Driver)
4. 下载SDL2源码
https://www.libsdl.org/download-2.0.php
选择source code分类的zip包
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即可.
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/