Android changing private static final field using Java Reflection?

android

Solution

I have tried the solutions above and get the correct way to modify static and final field in Android,here is the code works in Android 7.0

Field booleanField = Boolean.class.getField("FALSE");
booleanField.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("accessFlags");
modifiersField.setAccessible(true);
modifiersField.setInt(field,field.getModifiers() & ~Modifier.FINAL);
booleanField.set(null, true);

Problem

I want to set "NO_CACHE" to be newValue. Here is my code: ``` static void setFinalStatic(Object newValue) throws Exception { Field field = CacheManager.class.getDeclaredField("NO_CACHE"); field.setAccessible(true); Field modifiersField=Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field,field.getModifiers() & ~Modifier.FINAL); field.set(null, newValue); } ``` But running this code on Android produces the following error: ``` java.lang.NoSuchFieldException: modifiers ``` I find `modifiers` is a field in the `Field` class in Java, but it is not a field in the `Field` class on Android. This is Java `Field` class code: http://www.docjar.com/html/api/java/lang/reflect/Field.java.html This is Android `Field` class code: http://www.oschina.net/code/explore/android-2.2-froyo/java/lang/reflect/Field.java The above code in Java can work, but it does not work on the Android platform. How do I fix this?

Original source