4

我的应用在除 Android 10 之外的所有 Android 操作系统上运行良好。我使用的是已更新为 Android 10 的 Motorola One Power 设备。我们正在使用 Android Keystore 加密数据库。

应用程序在 luanch 上崩溃并出现以下错误。

android.security.keystore.KeyStoreConnectException:无法与 android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:148) 的 android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:256) 的密钥库服务通信.crypto.Cipher.tryTransformWithProvider(Cipher.java:2980)

它是一个 KeyStoreConnectException 问题。该应用程序需要时间连接到 KeyStoreConnectException。

注意:如果我在调试模式下运行应用程序,那么它工作正常。

请帮我找到解决方案。提前致谢。

4

3 回答 3

1

正如 MatPag 指出的那样,这是 Android 10 中的一个已知错误,在早期或更高版本中都不存在。当我在几个地方调用 Cipher::init() 时,这是 Kotlin 中的一个方便的包装函数:

private fun keyStoreWorkaroundForAndroid10(f: () -> Unit) {
    for (i in 0..3) {
        try {
            f()
            return
        } catch (e: ProviderException) {
            Timber.d("Applying Android 10 KeyStoreConnectException bug workaround. Counter: ${i}, Exception: ${e.message}")
            Thread.sleep(100)
            continue
        }
    }
}

然后你这样称呼它(记住 - 在后台线程中):

keyStoreWorkaroundForAndroid10 {
    cipherEncrypt.init(Cipher.ENCRYPT_MODE, publicKey)
}
于 2021-06-18T12:59:20.123 回答
0

这是此处跟踪的已知错误https://issuetracker.google.com/issues/147384380

谷歌修复了它,可能会在 Android 11 中可用。

我们目前不知道它是否会在某个时候通过 Android 10 上的安全补丁修复

于 2020-08-07T09:30:06.033 回答
0

我觉得你的代码运行时间比较长,可以移到线程,试试看!

于 2020-03-31T03:02:33.450 回答