Android: информация о устройстве

Иногда требуется получить общую информацию о мобильном устройстве программно: Какой производитель? Название устройства? Версия ОС?

Может быть полезно как для статистики использования, так и для, например, формирования уникального идентификатора устройства (очевидно, что не все поля для этого подойдут)

Вся интересная информация находится в статик-полях класса android.os.Build. С помощью рефлексии мы можем перечислить их все и вывести содержимое:

@Override
public void onResume() {
super.onResume();
for (Field f : android.os.Build.class.getDeclaredFields()) {
try {
Log.d("DevInfo", f.getName() + " = " + f.get(String.class));
} catch (Exception ex) { }
}
}

После этого лезем в DDMS и смотрим какие поля от девайса нам нужны :)
Например для эмулятора Android 1.6 Google API

BOARD = unknown
BRAND = generic
CPU_ABI = armeabi
DEVICE = generic
DISPLAY = google_sdk-eng 1.6 Donut 20842 test-keys
FINGERPRINT = generic/google_sdk/generic/:1.6/Donut/20842:eng/test-keys
HOST = e-honda.mtv.corp.google.com
ID = Donut
MANUFACTURER = unknown
MODEL = google_sdk
PRODUCT = google_sdk
TAGS = test-keys
TIME = 1259104608000
TYPE = eng
USER = android-build

Например для HTC Desire (Andorid 2.2)

BOARD = bravo
BOOTLOADER = 0.93.0001
BRAND = htc_wwe
CPU_ABI = armeabi-v7a
CPU_ABI2 = armeabi
DEVICE = bravo
DISPLAY = FRF91
FINGERPRINT = htc_wwe/htc_bravo/bravo/bravo:2.2/FRF91/293415:user/release-keys
HARDWARE = bravo
HOST = AA108
ID = FRF91
MANUFACTURER = HTC
MODEL = HTC Desire
PRODUCT = htc_bravo
RADIO = unknown
TAGS = release-keys
TIME = 1290757791000
TYPE = user
UNKNOWN = unknown
USER = unknown