Это поле является публичным. Вам не нужно размышление, чтобы прочитать это.
Но в вашем коде есть несколько проблем, которые вызывают эту ошибку:
Class myBuildClass = android.os.Build.class;
Field m1 = Build.class.getDeclaredField("MANUFACTURER");
Вы определяете myBuildClass, но позже вы его никогда не используете. То же самое для поля m1. И после этого вы просто получаете к нему прямой доступ по телефону
Build.MANUFACTURER;
Тогда для чего используется весь материал отражения?
Если это будет приватно, вы делаете это следующим образом:
Field manufacturer = android.os.Build.class.getDeclaredField("MANUFACTURER");
manufacturer.setAccessible(true);
int myManufacturer = manufacturer.getInt(android.os.Build.class);
Примечание: factoryr.getInt (android.os.Build.class) возможен только потому, что это статическое поле. В противном случае вам нужно будет передать фактический объект этого класса.
Я видел в ваших комментариях, что вы хотите проверить, доступно ли поле. Поле всегда будет доступно, но время от времени оно может иметь разные значения. Почему он не должен быть доступен?
Хорошо, теперь я также видел в ваших комментариях, что вы хотите сделать это для 1.6. Посмотрите документацию , и вы увидите, что это поле было добавлено на уровне API 1.4.
Ваш код может работать в версии 1.6, но я должен упомянуть, что считаю его действительно ненужным и отчасти также неправильным.