如何限制APK不安装在Android模拟器/模拟器中但在实际设备中?

时间:2013-04-25 11:17:43

标签: android android-emulator apk

希望您知道安装在Android设备中的应用程序可以在Astro文件管理器等应用程序的帮助下备份并存储为可安装文件(作为APK文件)。同样的apk也可以安装在android模拟器中。因此,其他人可能很容易深入挖掘已安装的应用程序的文件,如数据库,共享首选项等。

有没有办法只允许在真实设备中安装而不是在模拟器中安装???

我知道如果它是ROOTED设备,我们可以像在模拟器中一样访问应用程序的数据。即使我想知道我们是否可以限制在模拟器中安装apk。

提前致谢

4 个答案:

答案 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
}