Skip to main content
  1. Articles/

Q: Android: How to programmatically access the device serial number shown in the AVD manager (API Version 8)

This was originally posted as an answer to the question "Android: How to programmatically access the device serial number shown in the AVD manager (API Version 8)" on stackoverflow.com.
72 upvotes
161k views

Up to Android 7.1 (SDK 25) #

Until Android 7.1 you will get it with:

Build.SERIAL

From Android 8 (SDK 26) #

On Android 8 (SDK 26) and above, this field will return UNKNOWN and must be accessed with:

Build.getSerial()

which requires the dangerous permission android.permission.READ_PHONE_STATE.

From Android Q (SDK 29) #

Since Android Q using Build.getSerial() gets a bit more complicated by requiring:

android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE (which can only be acquired by system apps), or for the calling package to be the device or profile owner and have the READ_PHONE_STATE permission. This means most apps won’t be able to uses this feature. See the Android Q announcement from Google.

See Android SDK reference


Best Practice for Unique Device Identifier #

If you just require a unique identifier, it’s best to avoid using hardware identifiers as Google continuously tries to make it harder to access them for privacy reasons. You could just generate a UUID.randomUUID().toString(); and save it the first time it needs to be accessed in e.g. shared preferences. Alternatively you could use ANDROID_ID which is a 8 byte long hex string unique to the device, user and (only Android 8+) app installation. For more info on that topic, see Best practices for unique identifiers.