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

Mad*_*dhu 6 android android-emulator apk

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

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

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

提前致谢

Sae*_*eed 8

使用这个功能:

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);
}
Run Code Online (Sandbox Code Playgroud)

因此:

if (isEmulator()) {
   // emulator
} else {
   //not emulator
}
Run Code Online (Sandbox Code Playgroud)

我的建议:

从 github试试这个

易于检测的android模拟器

如何使用示例:

EmulatorDetector.with(this)
                .setCheckTelephony(true)
                .addPackageName("com.bluestacks")
                .setDebug(true)
                .detect(new EmulatorDetector.OnEmulatorDetectorListener() {
                    @Override
                    public void onResult(boolean isEmulator) {

                    }
                });
Run Code Online (Sandbox Code Playgroud)


Gra*_*and 5

没有通用的方法可以做到这一点。毕竟,模拟器的工作是尽可能地像真实设备一样运行,包括模拟来自相机、GPS 传感器等的输入。

如果您将清单设置为依赖于模拟器通常不支持的某些硬件,您可能会有所收获。例如:

<uses-feature android:name="android.hardware.sensor.accelerometer" 
              android:required="true" />
Run Code Online (Sandbox Code Playgroud)

但实际上,如果您想防止人们查看您应用程序存储的数据,最好的解决方案是对其进行加密或混淆。