Reputation: 4857
How I can get value of static field in another package?
I need know string
values of .R
class or similar.
I try use something like this:
Class.forName("com.notmypackage.R$string").getDeclaredFields();
or in detailed case:
for (Field field : Class.forName("com.android.webview.R$string").getDeclaredFields()) {
}
but none success, got exception:
11-08 10:02:38.038 4983-4983/com.mypack W/System.err: java.lang.ClassNotFoundException: com.android.webview.R$string
11-08 10:02:38.038 4983-4983/com.mypack W/System.err: at java.lang.Class.classForName(Native Method)
11-08 10:02:38.038 4983-4983/com.mypack W/System.err: at java.lang.Class.forName(Class.java:309)
11-08 10:02:38.038 4983-4983/com.mypack W/System.err: at java.lang.Class.forName(Class.java:273)
There any way to get alien ***.R$string
values?
Upvotes: 0
Views: 1143
Reputation: 661
You can get static fields of class by:
Field[] fields= Class.forName("com.android.webview.R").getDeclaredFields();
List<Field> staticFields = new ArrayList<Field>();
for (Field field : fields) {
if (java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
// if you want to get String fields, check this
// field.getType().equals(String.class)
staticFields.add(field);
}
}
Or specify field name:
Field field= Class.forName("com.android.webview.R").getDeclaredField("field");
Then get value:
System.out.println(field.get(null));
It throws IllegalArgumentException, IllegalAccessException, SecurityException, ClassNotFoundException
Upvotes: 1