Хорошо, поэтому, основываясь на комментарии Майка, причина в некотором «улучшении» безопасности на стороне Andriod.
Начиная с Android 9, они ограничивают (даже с помощью Reflection) множество методов и полей.
https://developer.android.com/about/versions/pie/restrictions-non-sdk-interfaces
Поэтому, когда вы используете свое приложение, вы можете увидеть некоторые предупреждения в LogCat.Для нас это был, например, такой:
Accessing hidden field Landroid/database/sqlite/SQLiteProgram;->mBindArgs:[Ljava/lang/Object; (light greylist, reflection)
Он говорит, что конструктор, который мы хотели, был ограничен (т.е. недоступен), что привело к тому, что список конструкторов вернулся пустым (и это вызвало сбой).
Google утверждает количество запрещенных методов и полей следующим образом:
Списки примерно такие:
белый список (также известный как SDK) ~ = 74 000 методов и полей
light-greylist ~ = 11 000 методов и полей dark-greylist ~ = 121 000
черный список методов и полей ~ = 9 000 методов и полей
Имейте в виду, что этотолько «сработало» (сбой произошел из-за более позднего использования пустого возвращаемого значения, но сам вызов не выбрасывал), потому что метод light greylist
, тогда как он генерировал бы исключения, если бы он был «темнее».
Самым простым решением действительно является целевая версия до 27 (вместо 28), если у вас есть только светло-серые предупреждения. Это «выигрывает ваше время» до следующей версии Android, когда они могутстрогий дальше.Для выдачи ошибок это, вероятно, не то, что вы хотите, потому что это все еще может привести к сбою!