希望您知道安装在Android设备中的应用程序可以在Astro文件管理器等应用程序的帮助下备份并存储为可安装文件(作为APK文件)。同样的apk也可以安装在android模拟器中。因此,其他人可能很容易深入挖掘已安装的应用程序的文件,如数据库,共享首选项等。
有没有办法只允许在真实设备中安装而不是在模拟器中安装???
我知道如果它是ROOTED设备,我们可以像在模拟器中一样访问应用程序的数据。即使我想知道我们是否可以限制在模拟器中安装apk。
提前致谢
答案 0 :(得分:3)
没有通用的方法。毕竟,仿真器的工作就是尽可能地像真实设备一样,包括模拟来自摄像头,GPS传感器等的输入。
如果将清单设置为依赖于模拟器中通常不支持的某些硬件,则可能会出现问题。例如:
<uses-feature android:name="android.hardware.sensor.accelerometer"
android:required="true" />
但实际上,如果您想阻止人们在应用程序的存储数据中徘徊,最好的解决方案是对其进行加密或混淆。
答案 1 :(得分:3)
使用此功能:
public static boolean isEmulator() {
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);
}
为此:
if (isEmulator()) {
// emulator
} else {
//not emulator
}
我的推荐
从github尝试this。
易于检测android模拟器
- 已在Device Farm(https://aws.amazon.com/device-farm/)中的真实设备上检查过
- BlueStacks
- Genymotion
- Android模拟器
- 安迪46.2.207.0
- MEmu播放
- Nox应用程序播放器
- Koplayer
- .....
如何与示例一起使用:
EmulatorDetector.with(this)
.setCheckTelephony(true)
.addPackageName("com.bluestacks")
.setDebug(true)
.detect(new EmulatorDetector.OnEmulatorDetectorListener() {
@Override
public void onResult(boolean isEmulator) {
}
});
答案 2 :(得分:1)
目前无法阻止在模拟器上安装APK。 (以前可以通过向应用程序添加传感器要求来实现,但是这些日期模拟器也可以模拟它)
但是,在运行时,您应该能够使用以下检查验证您的应用是否在模拟器上运行:
if (android.os.Build.MODEL.equals(“google_sdk”)) {
// emulator
} else {
//not emulator
}
您可以在创建数据库和SharedPreference文件等之前进行此检查。
答案 3 :(得分:0)
Xamarin版本的@Saeed
public static bool isEmulator()
{
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);
}
为此:
if (isEmulator()) {
// emulator
} else {
//not emulator
}