我的应用在除 Android 10 之外的所有 Android 操作系统上运行良好。我正在使用已更新为 Android 10 的 Motorola One Power 设备。我们正在使用 Android Keystore 加密数据库。
应用程序在 luanch 上崩溃并出现以下错误。
android.security.keystore.KeyStoreConnectException: Failed to communicate with keystore service at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:256) at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit(AndroidKeyStoreCipherSpiBase.java:148) at javax.crypto.Cipher.tryTransformWithProvider(Cipher.java:2980)
它是一个 KeyStoreConnectException 问题。该应用程序需要时间连接到 KeyStoreConnectException。
注意:如果我在 Debug模式下运行应用程序,那么它工作正常。
请帮我找到解决方案。提前致谢。
最佳答案
正如 MatPag 指出的那样,这是一个 known bug在早期或更高版本中不存在的 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)
}
关于android - 如何解决 Android 10 上的 KeyStoreConnectException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60482479/