Xamarin.Android DateTime связанные сбои на устройствах Samsung - PullRequest
1 голос
/ 20 марта 2019

Мы испытываем сбои при разборе / создании экземпляра DateTime на Android в кроссплатформенном приложении на основе Xamarin.Сбои происходят только на устройствах Samung, в основном S8, S8 + и Note8 с Android 8 и 9. К сожалению, трассировки стека в отчетах о сбоях состоят только из нескольких строк.К сожалению, невозможно связаться с пользователем, чтобы получить больше информации, потому что у нас нет никакой информации о том, кто это.

Существуют различные проявления проблемы, все в некоторой степени связанные:

Конструктор DateTime вызывается с недопустимыми параметрами

System.ArgumentOutOfRangeException: Year, Month, and Day parameters describe an un-representable DateTime.
  Module "System.DateTime", line 0, in DateToTicks
    DateToTicks(System.Int32 year, System.Int32 month, System.Int32 day)
  Module "System.DateTime.", line 0, in ctor
    ctor(System.Int32 year, System.Int32 month, System.Int32 day, System.Int32 hour, System.Int32 minute, System.Int32 second)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()

NullReferenceException в конструкторе DateTime

System.NullReferenceException: Object reference not set to an instance of an object
  Module "System.DateTime.", line 0, in ctor
    ctor(System.Int32 year, System.Int32 month, System.Int32 day, System.Int32 hour, System.Int32 minute, System.Int32 second)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()

Однако существуют также некоторые связанные сбоиэто указывает на библиотеку JSON

исключение NullReferenceException в Json DateTimeParser ParseZone

System.NullReferenceException: Object reference not set to an instance of an object
  Module "Newtonsoft.Json.Utilities.DateTimeParser", line 0, in ParseZone
    ParseZone(System.Int32 start)
  Module "Newtonsoft.Json.Utilities.DateTimeParser", line 0, in ParseTimeAndZoneAndWhitespace
    ParseTimeAndZoneAndWhitespace(System.Int32 start)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()

IndexOutOfRangeException в Json DateTimeParser Parse2Digit

1025 *

NullReferenceException в Json DateTimeParser ParseChar

System.NullReferenceException: Object reference not set to an instance of an object
  Module "Newtonsoft.Json.Utilities.DateTimeParser", line 0, in ParseChar
    ParseChar(System.Int32 start, System.Char ch)
  Module "System.Threading._ThreadPoolWaitCallback", line 0, in PerformWaitCallback
    PerformWaitCallback()

Это только некоторые отчеты о сбоях, есть еще пара, но все они идут в одном направлении.

то, что я пробовал до сих пор:

  • Исследовал наш код и код библиотеки с открытым исходным кодом, которые могут быть причиной проблемы
  • Поддельные ответы сервера для возврата бесчисленных разновидностей допустимых / недействительных значений даты
  • Написал тестовое приложение, которое анализирует бесчисленные разновидности действительных / недействительных значений даты

что у меня естьвыяснили до сих пор:

  • Я вообще не могу воспроизвести проблему
  • Как уже упоминалось выше, она появляется только на устройствах Samsung * 8
    • Это не происходит на другихУстройства Android
    • Это также не происходит в приложениях для iOS или Windows
  • В нашем собственном коде вряд ли возникнет проблема, поскольку мы не используем эти конструкторы (и редко обрабатывают значения даты и времени вручную полностью)

Кто-нибудь сталкивался с какой-либо подобной проблемой или имеет представление, в каком направлении я могу продолжать смотреть?Я совершенно невежественен и буду признателен за любые подсказки.

1 Ответ

0 голосов
/ 31 мая 2019

После некоторых исследований выясняется, что проблема связана со случайными исключениями NullReferenceException, возникающими в приложениях Xamarin на устройствах Samsung при развертывании 32-битного apk на 64-битном устройстве.Из-за другой проблемы в прошлом нам пришлось отключить 64-битные сборки, после устранения этой проблемы и повторного развертывания 64-битной версии мы еще не получили аналогичный отчет о сбое.

...