禁用指纹传感器 - Android模拟器

时间:2018-05-01 20:37:22

标签: android android-emulator android-fingerprint-api

如何在Android模拟器中禁用指纹传感器?我在设置窗口或config.ini文件中找不到任何选项。

默认情况下,SDK 23以上的所有模拟器都具有指纹支持。我想在SDK 23上面测试我的流程,没有指纹支持。

2 个答案:

答案 0 :(得分:3)

使用常规方法无法实现。但是有非常规的。

您无法禁用的原因是,它的存在不是通过Android Framework而是通过作为所有其他传感器的底层Linux OS来控制的。因此,如果您的系统具有该传感器的驱动程序-Android会认为该传感器存在。

因此,指纹传感器的存在取决于驾驶员。解决方案现在很容易。如果没有驱动程序-将没有传感器。您要做的就是禁用(与OS断开连接)驱动程序。为此,您将需要

  • root
  • 安装了adb shell或某些终端应用程序(su或其他东西)

我不完全确定系统中指纹驱动程序的显示方式(我曾使用其他传感器进行过描述),但是经过很长时间的谷歌搜索和外推后,我认为它可能被称为 fpc

因此,您可能需要在系统驱动器文件夹中进行搜索-类似于 /sys/bus/(platform/spi/blablabla/something)/drivers/fpc.../

该文件夹中应有四个文件-ueventbind,而我们将需要unbinddeviceName

现在取消绑定传感器-echo deviceName > /sys/bus/(platform/spi/blablabla/something)/drivers/fpc.../unbind

现在系统将认为系统中没有指纹传感器...直到下一次重新启动。

我当时在真实设备上以及其他传感器上执行此操作,但我认为方法应该几乎相同。

灵感来自here

希望有帮助。

答案 1 :(得分:2)

在模拟器设置中没有明确的方法可以覆盖它。一种解决方法是扩展BiometricPrompt(API 28+)或FingerprintManagerCompat(27及以下)并提供您自己的实现。对于FingerprintManagerCompat的扩展,您可以将isHardwareDetected()覆盖为类似

    override fun isHardwareDetected() {
          if (System.getProperty("os.arch") == "mips64") {
                return false;
          } 
          return super.isHardwareDetected()
    }

对于BiometricPrompt,您将以类似的方式覆盖BiometricPrompt.authenticate()以返回常量BIOMETRIC_ERROR_HW_UNAVAILABLE