Я должен поддержать устройство размера 16 КБ в Android 35. Чтобы поддержать устройства размера 16 КБ, мы обновили версию AGP до последнего 8.7. Последняя версия AGP требует Java 17. < /p>
Однако после обновления до Java 17 тестовые случаи терпят неудачу везде, где размышление используется для доступа к частным переменным или методам.
Существует так много устаревших тестовых случаев. Работа над этими тестовыми случаями потребуется много переделки и рефакторирования в коде, что невозможно из -за ограничений времени и затрат. Как я могу решить эту проблему без рефакторинга? fun getFinalPrivateVariable(clazz: Class, fieldName: String): Field {
val field = getPrivateVariable(clazz, fieldName)
val modifiers = Field::class.java.getDeclaredField("modifiers")
modifiers.isAccessible = true
modifiers.setInt(field, field.modifiers and Modifier.FINAL.inv())
return field
}
Я уже пытался добавить ниже строки в gradle.properties :
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED
Он не сработал.
также попытался добавить в build.gradle :
android {
testOptions {
unitTests.all {
jvmArgs += [
'--add-opens=java.base/java.lang.reflect=ALL-UNNAMED',
'--add-opens=java.base/java.lang=ALL-UNNAMED'
]
}
}
}
< /code>
также попытался рефактор: < /p>
@Throws(Exception::class)
fun getFinalPrivateVariable(clazz: Class, fieldName: String): Field {
val field = getPrivateVariable(clazz, fieldName)
field.isAccessible = true
// Obtain a VarHandle for the "modifiers" field in the Field class
val modifiersHandle: VarHandle = MethodHandles.privateLookupIn(Field::class.java, MethodHandles.lookup())
.findVarHandle(Field::class.java, "modifiers", Int::class.javaPrimitiveType)
// Remove the FINAL modifier
val mods = modifiersHandle.get(field) as Int
modifiersHandle.set(field, mods and Modifier.FINAL.inv())
return field
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... ception-mo
Java 17 с модификаторами ограничения отражения java.lang.nosuchfieldexception: модификаторы ⇐ Android
Форум для тех, кто программирует под Android
1741841935
Anonymous
Я должен поддержать устройство размера 16 КБ в Android 35. Чтобы поддержать устройства размера 16 КБ, мы обновили версию AGP до последнего 8.7. Последняя версия AGP требует Java 17. < /p>
Однако после обновления до Java 17 тестовые случаи терпят неудачу везде, где размышление используется для доступа к частным переменным или методам.
Существует так много устаревших тестовых случаев. Работа над этими тестовыми случаями потребуется много переделки и рефакторирования в коде, что невозможно из -за ограничений времени и затрат. Как я могу решить эту проблему без рефакторинга? fun getFinalPrivateVariable(clazz: Class, fieldName: String): Field {
val field = getPrivateVariable(clazz, fieldName)
val modifiers = Field::class.java.getDeclaredField("modifiers")
modifiers.isAccessible = true
modifiers.setInt(field, field.modifiers and Modifier.FINAL.inv())
return field
}
Я уже пытался добавить ниже строки в gradle.properties :
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED
Он не сработал.
также попытался добавить в build.gradle :
android {
testOptions {
unitTests.all {
jvmArgs += [
'--add-opens=java.base/java.lang.reflect=ALL-UNNAMED',
'--add-opens=java.base/java.lang=ALL-UNNAMED'
]
}
}
}
< /code>
также попытался рефактор: < /p>
@Throws(Exception::class)
fun getFinalPrivateVariable(clazz: Class, fieldName: String): Field {
val field = getPrivateVariable(clazz, fieldName)
field.isAccessible = true
// Obtain a VarHandle for the "modifiers" field in the Field class
val modifiersHandle: VarHandle = MethodHandles.privateLookupIn(Field::class.java, MethodHandles.lookup())
.findVarHandle(Field::class.java, "modifiers", Int::class.javaPrimitiveType)
// Remove the FINAL modifier
val mods = modifiersHandle.get(field) as Int
modifiersHandle.set(field, mods and Modifier.FINAL.inv())
return field
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79439108/java-17-with-reflection-restriction-modifiers-java-lang-nosuchfieldexception-mo[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия