static final по определению константа, но на практике это использовалось годами для разных хаков.👉 Попытка изменить такое поле через рефлексию бросает
IllegalAccessException 👉 Попытка через JNI
SetStaticLongField() и аналоги — сразу краш приложения 👉 Ограничение включено только для приложений с
targetSdk = 37, но в Beta 1 проверка активна для всех приложений, чтобы выловить проблемы раньшеЗачем это нужно? Пока
static final поле формально могло меняться, рантайм не мог агрессивно оптимизировать код, который к нему обращается. Теперь — может. На практике это чаще всего задевает тесты, которые через рефлексию подменяют константы в production-коде, и старые хаки с логированием или конфигурацией. Где-то жить станет чуть сложнее, но в целом всё закономерно — меньше хаков, честнее код.🔗 Источник: developer.android.com
#android #android17