Оказывается, что одна из моих моделей Gson выставила геттер, который вернул File. Gson использует отражение для рекурсивной проверки полей классов и при этом нарушает отражение запрещенных интерфейсов SDK.
Чтение ограничительного документа, связанного в вопросе, заставило меня более внимательно взглянуть на сообщения журнала, и, конечно же, один привлек мое внимание:
Доступ к скрытому полю [...] (темный серый список, отражение)
Я не помню точно сообщение, но суть в том, что оно было в темном сером списке.
Я обнаружил это, нацелившись на уровень SDK 28 и включив новую функцию StrictMode detectNonSdkApiUsage()
, при которой мое приложение могло аварийно завершить работу с трассировкой стека:
if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectNonSdkApiUsage()
.penaltyLog()
.build());
}
Трассировка стека не была сразу проницательной, но указала мне правильное направление.