我正在尝试将 SDL2 与 .NET MAUI 一起使用。
我尝试使用 buildscripts 目录中的 androidbuildlibs.sh 构建本机库。它为不同的体系结构生成了 libSDL.so。然后我将它们添加到项目中的 libs/ 目录中,并将构建操作设置为 AndroidNativeLibrary。当我尝试使用以下方法初始化 SDL 时:
[DllImport("libSDL2.so", CallingConvention = CallingConvention.Cdecl)]
public static extern int SDL_Init(uint flags);
SDL_Init 方法返回 -1。
我想我应该在 MainActivity 的某个地方初始化它。因此,我构建了包含 SDLActivity 的 java 库到 .jar 文件,并为其创建了一个绑定项目。然后我尝试让 MainActivity 继承自 SDLActivity 而不是 MauiAppCompatActivity。我重写了 LoadLibraries 方法,如下所示:
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : SDLActivity
{
public override void LoadLibraries()
{
base.LoadLibraries();
SDL2Helper.InitSDL();
}
}
现在我收到一个错误,表明未找到 libmain.so。
我还尝试让 SDL2 与 Xamarin 和 MAUI 一起使用。
我还使用 .jar 文件创建了一个绑定项目,并将库添加到 lib 文件夹中。
我不想直接从 SDLActivity 继承,所以我尝试手动初始化 SDL。
此代码基于 Qt 问题和 libsdl 存储库中的 android-project 源代码:
https://github.com/libsdl-org/SDL/issues/5356
https://github.com/libsdl-org/SDL/tree/SDL2/android-project
以下是我如何让 SDL 在 MAUI 上工作的示例:
public class MainActivity : MauiAppCompatActivity
{
protected override void OnCreate(Bundle? savedInstanceState)
{
base.OnCreate(savedInstanceState);
InitSdl();
}
protected override void OnDestroy()
{
base.OnDestroy();
CloseSdl();
}
private void InitSdl()
{
SDL.LoadLibrary("SDL2", this);
SDL.SetupJNI();
SDL.Initialize();
SDL.Context = this;
SdlBinding.SDL_SetMainReady();
var initCode = SdlBinding.SDL_Init(SdlBinding.SDL_INIT_AUDIO);
if (initCode != 0)
throw new Exception("SDL initialization failed");
}
private void CloseSdl()
{
SdlBinding.SDL_Quit();
if (SDL.Context == this)
{
SDL.Context = null;
}
}
}