Как разрешить KeyStoreConnectException на Android 10?

Мое приложение довольно хорошо работает на всех ОС Android, кроме Android 10. Я использую устройство Motorola One Power, которое было обновлено до Android 10. Мы используем Android Keystore для шифрования баз данных.

Приложение выдает сбой при запуске с ошибкой ниже.

android.security.keystore.KeyStoreConnectException: не удалось связаться со службой хранилища ключей в android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized(AndroidKeyStoreCipherSpiBase.java:256) в android.security.keySpiBase.java:256.crypto.Cipher.tryTransformWithProvider(Cipher.java:2980)

Это проблема KeyStoreConnectException. Приложению требуется время для подключения к KeyStoreConnectException.

Примечание. Если я запускаю приложение в отладочном режиме, оно работает нормально.

Пожалуйста, помогите мне найти решение. Заранее спасибо.

3 ответа

Как указал 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)
}

Это известная ошибка, которая отслеживается здесь https://issuetracker.google.com/issues/147384380.

Google исправил это и, вероятно, будет доступен в Android 11.

В настоящее время мы не знаем, будет ли это исправлено с помощью исправлений безопасности на Android 10 в какой-то момент.

Я думаю, что запуск вашего кода занимает много времени, вы можете перейти к потоку, попробуйте!

Другие вопросы по тегам