Недавно я разработал приложение для iOS и Android с помощью Xamarin. Приложение использовалось относительно небольшим числом пользователей на деловом мероприятии, на котором присутствовал я лично. Хотя приложение работало на всех устройствах iOS и большинстве устройств Android, у меня было несколько устройств Android, на которых приложение постоянно аварийно завершало работу в одном и том же месте. Я решил отправить два отчета о сбоях, которые позже исследовал в Goole Developer Console.
Оказалось, что приложение вылетает на: java.lang.NoSuchMethodError: no non-static method "Landroid/view/View;.setForegroundTintList(Landroid/content/res/ColorStateList;)V"
Похоже, оно вылетает при вызове setForegroundTintList
. Я настроил свое приложение для совместимости с уровнем API 15, и документально подтверждено, что он доступен только с уровня API 21. Итак, пожалуйста...
Но подождите, нет, устройства, с которых я отправлял отчеты о сбоях, работали под управлением Android 5.0 и 5.1, и оба должны поддерживать уровень API 21 и выше. Одно из устройств — Samsung Galaxy Core Prime (Android 5.1), а другое — Samsung Galaxy S5 (klte), предположительно работающее под управлением Android 5.0, согласно отчету о сбое, хотя в консоли разработчика указано, что оно (поставляется??) с Android 4.0.3 - 4.0.4.
Я очень новичок в разработке Xamarin и Android, так что кто-нибудь может это объяснить? И что мне делать, чтобы предотвратить это в будущем?
Настроить больше эмуляторов для некоторых ключевых версий Android и протестировать больше эмуляторов? Есть ли что-нибудь, что компилятор может сделать для меня. Даже когда я понижаю целевой уровень API до уровня API 15, он компилируется и строится нормально. Разве он не должен жаловаться на использование методов, недоступных на целевом уровне API?