android 禁用模拟器 的多种办法 详细java代码
时间: 2023-12-13 17:04:48 浏览: 158
J2ME-Loader:适用于Android的J2ME模拟器
除了检测设备的建造指纹、型号、制造商、品牌、设备和产品外,还有其他一些方法可以禁用模拟器。以下是一些常用的方法和Java代码示例:
1. 检测运行的进程列表
```
public static boolean isRunningOnEmulator() {
String[] known_emulator_processes = {
"com.bluestacks",
"com.bignox.app",
"com.genymotion",
"com.google.android.gms.unstable",
"com.google.android.gms.persistent",
"com.google.android.gms",
"com.google.android.googlequicksearchbox:interactor",
"com.google.android.apps.maps:LocationFriendService",
"com.google.android.apps.maps:MyLocationService",
"com.google.android.apps.maps:FriendService",
"com.google.android.apps.maps",
"com.google.android.apps.maps:LocationFriendService",
"com.google.android.apps.maps:MyLocationService",
"com.google.android.gms.location.places.ui.PlaceAutocompleteActivity",
"com.google.android.apps.gsa.searchnow.SearchNowActivity",
"com.google.android.apps.gsa.staticplugins.opa.OpaActivity",
"com.google.android.apps.gsa.staticplugins.opa.OpaActivityContainer"
};
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningProcesses = activityManager.getRunningAppProcesses();
if (runningProcesses == null) {
return false;
}
for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
for (String known_emulator_process : known_emulator_processes) {
if (processInfo.processName.contains(known_emulator_process)) {
return true;
}
}
}
return false;
}
// 在你的代码中调用这个方法
if (isRunningOnEmulator()) {
// 禁止模拟器操作
} else {
// 执行真实设备下的操作
}
```
这段代码可以通过检查运行的进程列表来检测是否在模拟器上运行。如果返回`true`,则表示应用程序正在模拟器上运行。
2. 检测虚拟机内存状态
```
public static boolean isRunningOnEmulator() {
Runtime runtime = Runtime.getRuntime();
int maxMemory = (int) (runtime.maxMemory() / 1024);
if (maxMemory < 1024) {
// 内存小于1GB,可能是模拟器
return true;
}
return false;
}
// 在你的代码中调用这个方法
if (isRunningOnEmulator()) {
// 禁止模拟器操作
} else {
// 执行真实设备下的操作
}
```
这段代码可以通过检查虚拟机内存状态来检测是否在模拟器上运行。如果返回`true`,则表示应用程序正在模拟器上运行。
3. 检测设备是否已root
```
public static boolean isRunningOnEmulator() {
String[] known_emulator_roots = {
"/system/app/Superuser.apk",
"/sbin/su",
"/system/bin/su",
"/system/xbin/su",
"/data/local/xbin/su",
"/data/local/bin/su",
"/system/sd/xbin/su",
"/system/bin/failsafe/su",
"/data/local/su",
"/su/bin/su"
};
for (String known_emulator_root : known_emulator_roots) {
File file = new File(known_emulator_root);
if (file.exists()) {
return true;
}
}
return false;
}
// 在你的代码中调用这个方法
if (isRunningOnEmulator()) {
// 禁止模拟器操作
} else {
// 执行真实设备下的操作
}
```
这段代码可以通过检查设备是否已root来检测是否在模拟器上运行。如果返回`true`,则表示应用程序正在模拟器上运行。
请注意,这些方法都不是绝对可靠的,因为模拟器开发者可以绕过检测方法。因此,建议将这些方法组合使用,以提高准确性。
阅读全文