我正在使用加密共享首选项来加密首选项数据。我通过以下方式使用它:
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val sharedPreferences = EncryptedSharedPreferences.create(
context,
prefName,
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
我从我的应用程序类访问这个安全共享的首选项实例。这在我的生产应用程序中导致了 ANR 问题。
at sun.misc.Unsafe.park (Native method)
at java.util.concurrent.locks.LockSupport.park (LockSupport.java:190)
at java.util.concurrent.CompletableFuture$Signaller.block (CompletableFuture.java:1723)
at java.util.concurrent.ForkJoinPool.managedBlock (ForkJoinPool.java:3446)
at java.util.concurrent.CompletableFuture.waitingGet (CompletableFuture.java:1752)
at java.util.concurrent.CompletableFuture.get (CompletableFuture.java:1923)
at android.security.KeyStore.begin (KeyStore.java:1104)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized (AndroidKeyStoreCipherSpiBase.java:248)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineInit (AndroidKeyStoreCipherSpiBase.java:109)
at javax.crypto.Cipher.tryTransformWithProvider (Cipher.java:2984)
at javax.crypto.Cipher.tryCombinations (Cipher.java:2891)
at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider (Cipher.java:2796)
at javax.crypto.Cipher.chooseProvider (Cipher.java:773)
at javax.crypto.Cipher.init (Cipher.java:1143)
at javax.crypto.Cipher.init (Cipher.java:1084)
at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encryptInternal (AndroidKeystoreAesGcm.java:84)
at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.encrypt (AndroidKeystoreAesGcm.java:68)
at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.validateAead (AndroidKeystoreKmsClient.java:248)
at com.google.crypto.tink.integration.android.AndroidKeystoreKmsClient.getAead (AndroidKeystoreKmsClient.java:165)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewMasterKey (AndroidKeysetManager.java:267)
at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build (AndroidKeysetManager.java:236)
at androidx.security.crypto.EncryptedSharedPreferences.create (EncryptedSharedPreferences.java:160)
at androidx.security.crypto.EncryptedSharedPreferences.create (EncryptedSharedPreferences.java:120)
at my.application.example.sharedpref.PrefProvider.getSecuredSharedPref (PrefProvider.java:15)
此行为观察器主要在 Android 9 和 10 上。
cipher.init周围报告了 Andorid 错误。有什么办法可以解决这个问题。它导致我的应用程序在 Playstore 上出现不良行为。