API method Value meaning
Build.ABI armeabi is likely emulator
Build.ABI2 unknown is likely emulator
Build.BOARD unknown is emulator
Build.BRAND generic is emulator
Build.DEVICE generic is emulator
Build.FINGERPRINT generic†† is emulator
Build.HARDWARE goldfish is emulator
Build.HOST android-test†† is likely emulator
Build.ID FRF91 is emulator
Build.MANUFACTURER unknown is emulator
Build.MODEL sdk is emulator
Build.PRODUCT sdk is emulator
Build.RADIO unknown is emulator
Build.SERIAL null is emulator
Build.TAGS test-keys is emulator
Build.USER android-build is emulator
TelephonyManager.getDeviceId() All 0’s is emulator
TelephonyManager.getLine1 Number() 155552155xx† is emulator
TelephonyManager.getNetworkCountryIso() us possibly emulator
TelephonyManager.getNetworkType() 3 possibly emulator (EDGE)
TelephonyManager.getNetworkOperator().substring(0,3) 310 is emulator or a USA device (MCC)‡
TelephonyManager.getNetworkOperator().substring(3) 260 is emulator or a T-Mobile USA device (MNC)
TelephonyManager.getPhoneType() 1 possibly emulator (GSM)
TelephonyManager.getSimCountryIso() us possibly emulator
TelephonyManager.getSimSerial Number() 89014103211118510720 is emulator OR a 2.2-based device
TelephonyManager.getSubscriberId() 310260000000000‡‡ is emulator
TelephonyManager.getVoiceMailNumber() 15552175049 is emulator
Table 1: Listing of API methods that can be used for emulator detection. Some values clearly indicate that an emulator is in use,
others can be used to contribute to likelihood or in combination with other values for emulator detection. † xx indicates a small range
of ports for a particular emulator instance as obtained by the Android Debug Bridge (ADB). Emulator instances begin at 54 and will
always be an even number between 54 and 84 (inclusive). ‡ 310 is the MCC code for U.S. but may also be used in Guam. †† The value
is a prefix.‡‡ An emulator will be in the form MCC + MNC + 0’s, checking for the 0’s is likely sufficient.
augmented with other data. If another check establishes that the
device is a Verizon device, but the MNC shows T-Mobile, this may
indicate a modified emulator that is returning spoofed values.
Table 1 also contains several values from the android.os-
.Build class which contains information about the current soft-
ware build. Retail devices will have system properties that detail
the actual production build. An emulator will have build properties
based on the SDK build process used to create the emulator bi-
nary, such as the Build.FINGERPRINT. The fingerprints listed
in Table 2 clearly show a pattern followed by the SDK build pro-
cess. Even though the SDK documentation warns “Do not attempt
to parse this value,” testing for the presence of “generic,” “sdk,” or
“test-keys” yields perfect results for emulator detection when com-
pared to our sample of physical devices.
Experiments with physical devices led to some counter-intuitive
findings for some values. For example, the Build.ABI value on
the emulator is “armeabi” which is a plausible value for all devices
with an ARM processor (nearly all devices). However, the API re-
turned an empty string when used on a Motorola Droid. Similarly,
a Build.HOST value starting with “android-test” was also found
on the Droid. As shown in Table 3, the Build.HOST value is not
as useful for emulator detection as other Build values.
Detecting emulated networking.
The emulated networking environment is often quite different
than that found on physical devices. Each emulator instance is iso-
lated from the host PC’s network(s) via software. The network
address space is always 10.0.2/24. Furthermore, the last octet of
the virtual router, host loopback, up to four DNS resolvers, and the
Device Build.HOST
Emulator apa27.mtv.corp.google.com
Emulator android-test-15.mtv.corp.google.com
Emulator android-test-13.mtv.corp.google.com
Emulator android-test-25.mtv.corp.google.com
Emulator android-test-26.mtv.corp.google.com
Emulator vpbs30.mtv.corp.google.com
Emulator vpak21.mtv.corp.google.com
Motorola Droid android-test-10.mtv.corp.google.com
HTC EVO 4G AA137
Samsung Charge SEI-26
Samsung Galaxy Tab7 SEP-40
Samsung Galaxy Nexus vpak26.mtv.corp.google.com
Table 3: Build values collected from various instances.
emulator’s address are always known (1, 2, 3–6, and 15, respec-
tively). Unlike ADB, which reserves adjacent, incrementing TCP
ports, the network schema is the same for every emulator instance,
even if several instances are simultaneously running on one host.
While it is possible that a network to which a real device is con-
nected may exhibit exactly the same network layout, it is unlikely.
Devices configured with cellular data plans will often user carrier
DNS resolvers and have a carrier DHCP lease for the device I P.
WIFI networks to which a device connects are also unlikely to be
configured in exactly this way, and are unlikely to exhibit the quiet
nature of a /24 network solely allocated to one emulated device.
Accessing network information is relatively straightforward us-
ing standard Java techniques. A trivial detection for the emulated