Java 如何在Xamarin.Android中实现SDL2库?
我需要做什么:Java 如何在Xamarin.Android中实现SDL2库?,java,c#,android,xamarin.android,sdl,Java,C#,Android,Xamarin.android,Sdl,我需要做什么: 将SDL2源代码编译为x86和ARM64体系结构的.so文件 在Xamarin.Android中引用此文件 在我的C#代码中调用SDL2方法 到目前为止我学到的东西: SDL2需要Java活动或JNI绑定来调用本机代码 如果不将SDL2 libs和JNI集成到Xamarin.Android项目中,我就无法继续 我没有能力解决这个问题,我的大脑在这个过程中崩溃了 我尝试过的事情: 过时的GitHub项目: 这篇博客文章让我创建了C++代码,但没有使用XAMARIN
- 将SDL2源代码编译为x86和ARM64体系结构的.so文件
- 在Xamarin.Android中引用此文件
- 在我的C#代码中调用SDL2方法
- SDL2需要Java活动或JNI绑定来调用本机代码
- 如果不将SDL2 libs和JNI集成到Xamarin.Android项目中,我就无法继续
- 我没有能力解决这个问题,我的大脑在这个过程中崩溃了
- 过时的GitHub项目:
-
这篇博客文章让我创建了C++代码,但没有使用XAMARIN
- 通过AndroidStudio运行SDL2,它可以工作,但对我没有帮助,因为我需要调用我的C#代码
06-19 00:39:55.362 13143-13143/? I/zygote64: Late-enabling -Xcheck:jni
06-19 00:39:55.474 13143-13143/SDL2Droid_CS.SDL2Droid_CS W/ActivityThread: Application SDL2Droid_CS.SDL2Droid_CS can be debugged on port 8100...
06-19 00:39:55.514 13143-13143/? W/monodroid: Creating public update directory: `/data/user/0/SDL2Droid_CS.SDL2Droid_CS/files/.__override__`
Using override path: /data/user/0/SDL2Droid_CS.SDL2Droid_CS/files/.__override__
Using override path: /storage/emulated/0/Android/data/SDL2Droid_CS.SDL2Droid_CS/files/.__override__
Trying to load sgen from: /data/user/0/SDL2Droid_CS.SDL2Droid_CS/files/.__override__/libmonosgen-2.0.so
Trying to load sgen from: /storage/emulated/0/Android/data/SDL2Droid_CS.SDL2Droid_CS/files/.__override__/libmonosgen-2.0.so
Trying to load sgen from: /storage/emulated/0/../legacy/Android/data/SDL2Droid_CS.SDL2Droid_CS/files/.__override__/libmonosgen-2.0.so
Trying to load sgen from: /data/app/SDL2Droid_CS.SDL2Droid_CS-wmPu9Ce48QdJhvYc6bPRiA==/lib/arm64/libmonosgen-2.0.so
Trying to load sgen from: /data/user/0/SDL2Droid_CS.SDL2Droid_CS/files/.__override__/links/libmonosgen-2.0.so
06-19 00:39:55.515 13143-13143/? W/monodroid: Trying to load sgen from: /system/lib/libmonosgen-2.0.so
06-19 00:39:55.515 13143-13143/? A/monodroid: cannot find libmonosgen-2.0.so in override_dir: /data/user/0/SDL2Droid_CS.SDL2Droid_CS/files/.__override__, app_libdir: /data/app/SDL2Droid_CS.SDL2Droid_CS-wmPu9Ce48QdJhvYc6bPRiA==/lib/arm64 nor in previously printed locations.
Do you have a shared runtime build of your app with AndroidManifest.xml android:minSdkVersion < 10 while running on a 64-bit Android 5.0 target? This combination is not supported.
Please either set android:minSdkVersion >= 10 or use a build without the shared runtime (like default Release configuration).
06-19 00:39:55.362 13143-13143/?I/zygote64:延迟启用-Xcheck:jni
06-19 00:39:55.474 13143-13143/SDL2Droid_CS.SDL2Droid_CS W/ActivityThread:可以在端口8100上调试应用程序SDL2Droid_CS.SDL2Droid_CS。。。
06-19 00:39:55.514 13143-13143/? W/monodroid:创建公共更新目录:`/data/user/0/SDL2Droid\u CS.SDL2Droid\u CS/files/\uu__`
使用覆盖路径:/data/user/0/SDL2Droid\u CS.SDL2Droid\u CS/files/\uu覆盖__
使用覆盖路径:/storage/emulated/0/Android/data/SDL2Droid\u CS.SDL2Droid\u CS/files/__
正在尝试从:/data/user/0/SDL2Droid\u CS.SDL2Droid\u CS/files/.\uuuuu override\uuuuu/libmonosgen-2.0.so加载sgen
正在尝试从:/storage/emulated/0/Android/data/SDL2Droid\u CS.SDL2Droid\u CS/files/.\uuuuu override\uuuu/libmonosgen-2.0.so加载sgen
正在尝试从:/storage/emulated/0/./legacy/Android/data/SDL2Droid\u CS.SDL2Droid\u CS/files/.\uuu覆盖\uuuu/libmonosgen-2.0.so加载sgen
正在尝试从以下位置加载sgen:/data/app/SDL2Droid_CS.SDL2Droid_CS-wmPu9Ce48QdJhvYc6bPRiA==/lib/arm64/libmonosgen-2.0.so
正在尝试从:/data/user/0/SDL2Droid\u CS.SDL2Droid\u CS/files/.\uuu覆盖\uuuu/links/libmonosgen-2.0.so加载sgen
06-19 00:39:55.515 13143-13143/? W/monodroid:尝试从:/system/lib/libmonosgen-2.0.so加载sgen
06-19 00:39:55.515 13143-13143/? A/monodroid:找不到libmonosgen-2.0.so在override_dir:/data/user/0/SDL2Droid_CS.SDL2Droid_CS/files/.app_override_,app_libdir:/data/app/SDL2Droid_CS.SDL2Droid_CS-wmpu9ce48qdjhvyc6bria==/lib/arm64或在以前打印的位置。
在64位android 5.0目标上运行时,您是否有AndroidManifest.xml android:minSdkVersion<10的应用程序共享运行时版本?不支持此组合。
请将android:minSdkVersion>=10或使用没有共享运行时的构建(如默认版本配置)。
MinSDK是19,所以它给出的错误很奇怪
我假设SDL2没有正确实现,这导致了所有这些问题。GitHub代码有一些漏洞,上传它的人还没有激活
资源:
- SDL2网站:
- SDL2来源:
- SDL2Droid GitHub项目:
- 博客中的GitHub项目:
.dll
文件。然后将其添加为项目的引用。您可以通过以下方式调用这些方法:
using SDL2;
SDL.SDL_SetHint(SDL.SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING, "1");
TL;DR:工作文件在这里: 所以我找出了崩溃的原因,这是由于VisualStudio为调试而实现的共享运行时造成的。它是通过在项目设置中禁用共享运行时修复的 项目设置->Android选项->取消勾选“使用共享运行时” 1。关于GitHub代码不起作用的原因: 这是因为“bindings”项目中的.jar文件已损坏。我可以通过自己从SDL2源代码编译.jar文件来修复它。您需要编译的.java文件是,也可以从源代码中获取 一旦有了working.jar,只需从Jars文件夹中删除现有的.jar,并将其替换为新的 如果不能生成.jar文件,可以使用上面链接的GitHub项目中的文件 2。要创建.so文件: 之后,需要编译处理器体系结构所需的.so文件。它是使用Android NDK和make脚本完成的。来自SDL2Droid GitHub的make脚本运行良好,因此我只需更改一些参数,将android minSdkVersion增加到19,并获得所有架构(x86、x86_64、ARM、ARM64)的.so文件 这是生成.so文件的bash代码。如果使用命令提示符,只需将“$NATIVEDIR”更改为项目的绝对路径 如果无法生成这些本机库,则可以使用上面链接的GitHub存储库中的本机库 它们至少需要android-19 sdk,并可用于所有受支持的体系结构 要使用它们,只需将libs文件夹放在Xamarin.Android项目目录中
#!/bin/bash
NATIVEDIR=$(dirname "$0")
ndk-build -j 4 NDK_PROJECT_PATH="$NATIVEDIR/../SDL2Droid-CS" NDK_APPLICATION_MK="$NATIVEDIR/Application.mk"