package net.rafaeltoledo.security.util;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.os.Build;
import android.util.Log;
public class EnvironmentChecker {
private static final String TAG = EnvironmentChecker.class.getSimpleName();
private static String getSystemProperty(String name) throws Exception {
Class systemPropertyClass = Class.forName("android.os.SystemProperties");
return (String) systemPropertyClass.getMethod("get", new Class[]{String.class})
.invoke(systemPropertyClass, name);
}
public static boolean alternativeIsEmulator() {
return Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.startsWith("unknown")
|| Build.MODEL.contains("google_sdk")
|| Build.MODEL.contains("Emulator")
|| Build.MODEL.contains("Android SDK built for x86")
|| Build.MANUFACTURER.contains("Genymotion")
|| (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
|| "google_sdk".equals(Build.PRODUCT)
|| "goldfish".equals(Build.HARDWARE);
}
public static boolean isEmulator() {
try {
boolean goldfish = getSystemProperty("ro.hardware").contains("goldfish");
boolean emu = getSystemProperty("ro.kernel.qemu").length() > 0;
boolean sdk = getSystemProperty("ro.product.model").equals("sdk");
if (emu || goldfish || sdk) {
return true;
}
} catch (Exception e) {
Log.d(TAG, "Failed to check enviroment", e);
}
return false;
}
public static boolean isDebuggable(Context context) {
return (context.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
}
}