Android开发检测是否在模拟器上运行
测试了在夜神模拟器上可行。也可能有些模拟器上检测不出来,也可能在真机上误判。有好建议的可评论补全。
直接上代码:
public class EmulatorUtils {
public static boolean checkIsEmulator(Context context) {
return !hasSensors(context) || checkIsEmulatorByCpu() || isEmulatorByDeviceInfo();
}
private static boolean isEmulatorByDeviceInfo() {
String model = Build.MODEL.toLowerCase();
String manufacturer = Build.MANUFACTURER;
String hardware = Build.HARDWARE;
String fingerprint = Build.FINGERPRINT;
return (model.contains("google_sdk") ||
model.contains("droid4x") ||
model.contains("emulator") ||
model.contains("android sdk built for x86") ||
manufacturer.contains("Genymotion") ||
hardware.contains("goldfish") ||
hardware.contains("ranchu") ||
hardware.contains("vbox86") ||
fingerprint.contains("generic") ||
fingerprint.contains("unknown"));
}
private static boolean hasSensors(Context context) {
SensorManager sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
return !sensors.isEmpty();
}
private static boolean checkIsEmulatorByCpu() {
List<String> abiList = Arrays.asList(Build.SUPPORTED_ABIS);
return abiList.contains("x86") || abiList.contains("x86_64");
}
}