Я должен поддержать устройство размера 16 КБ в Android 35. Чтобы поддержать устройства размера 16 КБ, мы обновили версию AGP до последнего 8.7. Версия Lates AGP требует версии Jave 17. Однако после обновления версии Java 17 для проекта тестовые примеры выходят из строя, где бы ни использовалось, чтобы получить доступ к частным переменным или методу. Есть так много унаследованных тестовых случаев. Работа над этими тестовыми случаями потребуется много переделки и рефакторирования в коде, что невозможно из -за временного и затрат. Как я могу решить эту проблему без рефакторинга. < /P>
Код, который вызывает проблему < /p>
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
}
< /code>
Я уже пытался добавить ниже строки в gradle.properties < /p>
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED
< /code>
Это не сработало. < /p>
также попытался добавить в build.gradle < /p>
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
1739688662
Anonymous
Я должен поддержать устройство размера 16 КБ в Android 35. Чтобы поддержать устройства размера 16 КБ, мы обновили версию AGP до последнего 8.7. Версия Lates AGP требует версии Jave 17. Однако после обновления версии Java 17 для проекта тестовые примеры выходят из строя, где бы ни использовалось, чтобы получить доступ к частным переменным или методу. Есть так много унаследованных тестовых случаев. Работа над этими тестовыми случаями потребуется много переделки и рефакторирования в коде, что невозможно из -за временного и затрат. Как я могу решить эту проблему без рефакторинга. < /P>
Код, который вызывает проблему < /p>
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
}
< /code>
Я уже пытался добавить ниже строки в gradle.properties < /p>
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED
< /code>
Это не сработало. < /p>
также попытался добавить в build.gradle < /p>
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антехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия