升级到 Maui 后,在 Xamarin.Android.Tasks.XAJavaTypeScanner.GetJavaTypes 处构建异常“错误 XAGJS7001:System.NullReferenceException”

问题描述 投票:0回答:1

背景:

可在 Windows、Android 和 iOS 上运行的应用程序。

  • 单独的项目。 Xamarin.Android、Xamarin.iOS、Windows。
  • 不是 Xamarin.Forms。我们通过 SkiaSharp 和 OpenGL 进行自己的渲染。
  • 几乎所有源文件都在平台之间共享。
  • 今天可在所有平台上使用。
  • 直到几天前才在所有平台上发布。

但从本月开始,苹果将拒绝应用程序升级,除非它们在 iOS 17 SDK 上运行。 Xamarin 不支持。

  • 决定是时候升级到.Net 8了。
  • 决定先升级Android版本。

计划是以与我们使用 Xamarin 相同的“最小”方式使用毛伊岛:

  • 在每个平台上创建全屏位图。使用我们当前的 SkiaSharp/OpenGL 渲染代码。

迁移到毛伊岛:

运行 .Net Upgrade Assistant 将 .Net Framework 4.7 上的 Xamarin.Android 应用程序(无 Xamarin.Forms)迁移到 .Net 8 和 Maui。

我们很少使用特定于平台的 UI:一旦我们有了移动屏幕(或桌面窗口)位图,我们就可以使用 SkiaSharp 和 OpenGL 自己渲染所有内容。

Xamarin.Essentials 处理了我们平台特定所需的大部分内容。替换为适当的毛伊岛套餐。

我们的应用程序中可能出现的并发症:

  • 两个 Xamarin.Android dll。一个主项目和一个类库。
  • 古代工程布局。第一个版本是几年前的。
  • 一个 C++ dll。
  • 第三方库。
  • 很多很多行 C# 代码,数百个类。

虽然我们意识到可能需要相当长的时间才能让所有内容在 Maui 下正常运行,但看看我们是否至少可以构建和启动它(首先不调用大部分代码;只是像一个简单的示例应用程序一样)。

目前状态:

  • dll编译成功。
  • 调试构建:仅链接 Sdk。
  • PublishTrimmed false(稍后在单独的问题中返回错误)

Xamarin.Android.Tasks.XAJavaTypeScanner.GetJavaTypes 处的 System.NullReferenceException。

在构建过程的这一步中,我没有在互联网上找到任何存在此问题的地方。

VS 输出中错误的完整列表:

2>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\34.0.52\tools\Xamarin.Android.Common.targets(1513,3): error XAGJS7001: System.NullReferenceException: Object reference not set to an instance of an object.
2>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\34.0.52\tools\Xamarin.Android.Common.targets(1513,3): error XAGJS7001:    at Xamarin.Android.Tasks.XAJavaTypeScanner.GetJavaTypes(ICollection`1 inputAssemblies, XAAssemblyResolver resolver)
2>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\34.0.52\tools\Xamarin.Android.Common.targets(1513,3): error XAGJS7001:    at Xamarin.Android.Tasks.GenerateJavaStubs.Run(XAAssemblyResolver res, Boolean useMarshalMethods)
2>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\34.0.52\tools\Xamarin.Android.Common.targets(1513,3): error XAGJS7001:    at Xamarin.Android.Tasks.GenerateJavaStubs.RunTask()
2>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\34.0.52\tools\Xamarin.Android.Common.targets(1513,3): error XAGJS7001:    at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 25

问题:

如何查找上述内部构建错误的原因?

我们的应用程序可能会导致这种情况吗?

额外问题:有没有办法让 Xamarin.iOS 与 iOS 17 SDK 配合使用?
(作为临时解决方案,同时我们解决迁移问题。)

(我们的后备答案是剥离所有内容,一点一点地构建应用程序。这可能需要几天或几周的时间。想要一些关于在哪里查看的线索。)

android msbuild maui
1个回答
0
投票

古代工程布局。第一个版本是几年前的。

这就是症状的原因。创建一个新的 .Net 8 Maui 项目,并添加我们的源(通过 .Net Upgrade Assistant 针对 Maui 进行修改),修复了它。

没有费心去隔离导致失败的确切设置。

© www.soinside.com 2019 - 2024. All rights reserved.