После обновления до Мауи создайте исключение «ошибка XAGJS7001: System.NullReferenceException» в Xamarin.Android.Tasks.XAJavaTypeScanner.GetJavaTypes

Фон:

Приложение, работающее на Windows, Android и iOS.

  • Отдельные проекты. Xamarin.Android, Xamarin.iOS, WPF.
  • НЕ Xamarin.Forms. Мы делаем собственный рендеринг через SkiaSharp и OpenGL.
  • Почти все исходные файлы являются общими для разных платформ.
  • Работает (и может быть построен) сегодня на всех платформах.

НО, начиная с этого месяца, Apple отклоняет обновления приложений, если они не работают на iOS 17 SDK. Что не поддерживается Xamarin. И Xamarin достиг конца жизни.

  • Решил, что пришло время перейти на .Net 8.
  • Решил сначала обновить версию Android.

Миграция на Мауи:

Запустил .Net Upgrade Assistant для переноса приложения Xamarin.Android (без Xamarin.Forms) из .Net Framework 4.7 в .Net 8 и Maui.

Xamarin.Essentials обрабатывает большую часть того, что нам нужно для конкретной платформы. Заменено соответствующими пакетами Maui.

Возможные сложности в нашем приложении:

  • две библиотеки DLL Xamarin.Android. Основной проект и библиотека классов.
  • древняя планировка проекта. Первая версия была много лет назад.
  • dll C++.
  • сторонние библиотеки.
  • много-много строк кода C# в сотнях классов.

Текущее состояние:

  • Компиляция dll прошла успешно.
  • Отладочная сборка: связывание SdkOnly.
  • PublishTrimmed false (вернёмся к ошибкам в отдельном вопросе позже)

System.NullReferenceException в Xamarin.Android.Tasks.XAJavaTypeScanner.GetJavaTypes.

  • Я не нашел нигде в Интернете этой проблемы на этом этапе процесса сборки.

Полный список ошибок в выводе 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

Вопросы:

Как найти причину внутренних ошибок сборки, описанных выше?

Что в нашем приложении может привести к этому?

0
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

древняя планировка проекта. Первая версия была много лет назад.

Это и стало причиной симптома. Создание нового проекта .Net 8 Maui и добавление наших исходных кодов (измененных для Maui с помощью .Net Upgrade Assistant) исправило проблему.

Не удосужился определить, какая из старых настроек вызвала сбой.

Другие вопросы по теме