question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Only splash displayed, then app closes. java.security.KeyException: Permantly failed to instantiate encrypted preferences

See original GitHub issue

Avoid duplicates

  • Bug is not mentioned in the FAQ
  • Bug is specific for Android only, for general issues / questions that apply to iOS and Android please raise them in the documentation repository
  • Bug is not already reported in another issue

Describe the bug

I tried opening the app. The splash screen with the logo comes up, but after roughly 20 seconds the app screen closes again without any message. This does not recover and can be repeated as often as I like with the same outcome.

Exposure check logs indicate that the last automatic key check by the app was executed on the 19th in the morning (and all previous days at roughly the same time). Since then (last four days) no checks are recorded in Googles logs. App was auto-updated on the 16th to version 1.5.0.

I assume something broke in the background. Call stack (below) hints that it is an issue with encryption. It could relate to the known issue with SQLite getting corrupted, but in this case the symptoms and call-stack do not correlate with existing reports.

2020-10-24 09:09:39.551 2894-8104/? I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=de.rki.coronawarnapp/.ui.LauncherActivity bnds=[540,1500][789,1814]} from uid 10030
2020-10-24 09:09:39.593 2894-2912/? I/ActivityManager: Start proc 12098:de.rki.coronawarnapp/u0a242 for activity de.rki.coronawarnapp/.ui.LauncherActivity
2020-10-24 09:09:39.598 12098-12098/? E/i.coronawarnap: Not starting debugger since process cannot load the jdwp agent.
2020-10-24 09:09:39.626 2894-11778/? I/ZTEAppProfile: apk (de.rki.coronawarnapp) at top
2020-10-24 09:09:39.628 12098-12098/? I/i.coronawarnap: GetResourceLocales CollectLocales 
2020-10-24 09:09:39.632 12098-12098/? I/i.coronawarnap: GetResourceLocales CollectLocales 
2020-10-24 09:09:39.632 12098-12098/? I/chatty: uid=10242(de.rki.coronawarnapp) identical 1 line
2020-10-24 09:09:39.640 12098-12098/? I/i.coronawarnap: GetResourceLocales CollectLocales 
2020-10-24 09:09:58.544 12098-12098/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: de.rki.coronawarnapp, PID: 12098
    java.lang.RuntimeException: Unable to create application de.rki.coronawarnapp.CoronaWarnApplication: de.rki.coronawarnapp.exception.CwaSecurityException: something went wrong during a critical part of the application ensuring security, please referto the details for more information
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6015)
        at android.app.ActivityThread.access$1800(ActivityThread.java:218)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1730)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:192)
        at android.app.ActivityThread.main(ActivityThread.java:6994)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:532)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860)
     Caused by: de.rki.coronawarnapp.exception.CwaSecurityException: something went wrong during a critical part of the application ensuring security, please referto the details for more information
        at de.rki.coronawarnapp.util.security.SecurityHelper$encryptedPreferencesProvider$1.invoke(SecurityHelper.kt:9)
        at de.rki.coronawarnapp.util.security.SecurityHelper$globalEncryptedSharedPreferencesInstance$2.invoke(SecurityHelper.kt:3)
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:6)
        at de.rki.coronawarnapp.util.security.SecurityHelper.getGlobalEncryptedSharedPreferencesInstance(Unknown Source:2)
        at de.rki.coronawarnapp.storage.LocalData.getSharedPreferenceInstance(LocalData.kt:1)
        at de.rki.coronawarnapp.CoronaWarnApplication.onCreate(CoronaWarnApplication.kt:42)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1155)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6010)
        at android.app.ActivityThread.access$1800(ActivityThread.java:218) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1730) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:192) 
        at android.app.ActivityThread.main(ActivityThread.java:6994) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:532) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860) 
     Caused by: java.security.KeyException: Permantly failed to instantiate encrypted preferences
        at de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory.create(EncryptedPreferencesFactory.kt:2)
        at de.rki.coronawarnapp.util.security.SecurityHelper$encryptedPreferencesProvider$1$1.invoke(SecurityHelper.kt:1)
        at de.rki.coronawarnapp.util.security.SecurityHelper$encryptedPreferencesProvider$1.invoke(SecurityHelper.kt:7)
        at de.rki.coronawarnapp.util.security.SecurityHelper$globalEncryptedSharedPreferencesInstance$2.invoke(SecurityHelper.kt:3) 
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:6) 
        at de.rki.coronawarnapp.util.security.SecurityHelper.getGlobalEncryptedSharedPreferencesInstance(Unknown Source:2) 
        at de.rki.coronawarnapp.storage.LocalData.getSharedPreferenceInstance(LocalData.kt:1) 
        at de.rki.coronawarnapp.CoronaWarnApplication.onCreate(CoronaWarnApplication.kt:42) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1155) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6010) 
        at android.app.ActivityThread.access$1800(ActivityThread.java:218) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1730) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:192) 
        at android.app.ActivityThread.main(ActivityThread.java:6994) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:532) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860) 
     Caused by: java.lang.SecurityException: Could not decrypt key. decryption failed
        at androidx.security.crypto.EncryptedSharedPreferences.getAll(EncryptedSharedPreferences.java:13)
        at de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory$create$1.invoke(EncryptedPreferencesFactory.kt:29)
        at de.rki.coronawarnapp.util.RetryMechanism.retryWithBackOff$default(RetryMechanism.kt:7)
        at de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory.create(EncryptedPreferencesFactory.kt:1)
        at de.rki.coronawarnapp.util.security.SecurityHelper$encryptedPreferencesProvider$1$1.invoke(SecurityHelper.kt:1) 
        at de.rki.coronawarnapp.util.security.SecurityHelper$encryptedPreferencesProvider$1.invoke(SecurityHelper.kt:7) 
        at de.rki.coronawarnapp.util.security.SecurityHelper$globalEncryptedSharedPreferencesInstance$2.invoke(SecurityHelper.kt:3) 
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:6) 
        at de.rki.coronawarnapp.util.security.SecurityHelper.getGlobalEncryptedSharedPreferencesInstance(Unknown Source:2) 
        at de.rki.coronawarnapp.storage.LocalData.getSharedPreferenceInstance(LocalData.kt:1) 
        at de.rki.coronawarnapp.CoronaWarnApplication.onCreate(CoronaWarnApplication.kt:42) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1155) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6010) 
        at android.app.ActivityThread.access$1800(ActivityThread.java:218) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1730) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:192) 
        at android.app.ActivityThread.main(ActivityThread.java:6994) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:532) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860) 
     Caused by: java.security.GeneralSecurityException: decryption failed
        at com.google.crypto.tink.daead.DeterministicAeadWrapper$WrappedDeterministicAead.decryptDeterministically(DeterministicAeadWrapper.java:16)
        at androidx.security.crypto.EncryptedSharedPreferences.getAll(EncryptedSharedPreferences.java:8)
        at de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory$create$1.invoke(EncryptedPreferencesFactory.kt:29) 
        at de.rki.coronawarnapp.util.RetryMechanism.retryWithBackOff$default(RetryMechanism.kt:7) 
        at de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory.create(EncryptedPreferencesFactory.kt:1) 
        at de.rki.coronawarnapp.util.security.SecurityHelper$encryptedPreferencesProvider$1$1.invoke(SecurityHelper.kt:1) 
        at de.rki.coronawarnapp.util.security.SecurityHelper$encryptedPreferencesProvider$1.invoke(SecurityHelper.kt:7) 
        at de.rki.coronawarnapp.util.security.SecurityHelper$globalEncryptedSharedPreferencesInstance$2.invoke(SecurityHelper.kt:3) 
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:6) 
        at de.rki.coronawarnapp.util.security.SecurityHelper.getGlobalEncryptedSharedPreferencesInstance(Unknown Source:2) 
        at de.rki.coronawarnapp.storage.LocalData.getSharedPreferenceInstance(LocalData.kt:1) 
        at de.rki.coronawarnapp.CoronaWarnApplication.onCreate(CoronaWarnApplication.kt:42) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1155) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6010) 
        at android.app.ActivityThread.access$1800(ActivityThread.java:218) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1730) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:192) 
        at android.app.ActivityThread.main(ActivityThread.java:6994) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:532) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:860) 
2020-10-24 09:09:58.549 2894-4687/? W/ActivityManager:   Force finishing activity de.rki.coronawarnapp/.ui.LauncherActivity
2020-10-24 09:09:58.589 2894-11778/? I/ActivityManager: Process de.rki.coronawarnapp (pid 12098) has died: vis  +99TOP 
2020-10-24 09:09:58.590 2894-11778/? I/ZTEPoint_AI_AUTOSTART_CONTROL: died processName: de.rki.coronawarnapp
2020-10-24 09:09:58.598 715-1123/? W/SurfaceFlinger: Attempting to set client state on removed layer: Splash Screen de.rki.coronawarnapp#0
2020-10-24 09:09:58.598 715-1123/? W/SurfaceFlinger: Attempting to destroy on removed layer: Splash Screen de.rki.coronawarnapp#0
2020-10-24 09:09:58.607 715-793/? W/SurfaceFlinger: Attempting to destroy on removed layer: AppWindowToken{b51c549 token=Token{3957f50 ActivityRecord{3215113 u0 de.rki.coronawarnapp/.ui.LauncherActivity t11362}}}#0

Technical details

  • ZTE Axon 9 Pro
  • Android version: 9, Patch level July 1, 2020
  • CWA version 1.5.0, auto-updated 16th October
  • power-saving is turned off for CWA
  • background priority was enabled in setting

Possible Fix

I will try to follow the recovery mentioned in the SQLite bug.

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Reactions:1
  • Comments:17 (8 by maintainers)

github_iconTop GitHub Comments

3reactions
stephankncommented, Oct 24, 2020

Recovery:

  1. stop (force stop) CWA
  2. delete data/cache
  3. disable automatic time, set time back 14 days
  4. open CWA and complete enrolling steps
  5. close CWA and set back date to current date
2reactions
stephankncommented, Oct 26, 2020

I am no Android developer, but the pointer that adb can read this was good enough. So by checking the dates I can confirm that the background check on the 20th early morning happened (or more specifically failed) with still the old version installed, as 1.5.0 came later that day.

> adb shell dumpsys package de.rki.coronawarnapp | grep lastUpdate
    lastUpdateTime=2020-10-20 22:53:05
Read more comments on GitHub >

github_iconTop Results From Across the Web

AndroidX Security EncryptedSharedPreferences v1.1.0 /w API ...
When using this code block for API 21 and 22, the error appears on creating EncryptedSharedPreferences, and it says: Method threw 'com.google.
Read more >
using EncryptedSharedPreferences, it can cause crashes to ...
EncryptedSharedPreferences.create(EncryptedSharedPreferences.java:120) ... Caused by java.security.UnrecoverableKeyException: Failed to ...
Read more >
EncryptedSharedPreferences - Android Developers
An implementation of SharedPreferences that encrypts keys and values. WARNING: The preference file should not be backed up with Auto Backup.
Read more >
Encrypting Shared Preferences with the AndroidX Security ...
With the dependency added, the next step is to create an encryption master key and store it in the Android KeyStore. The security...
Read more >
Class Index | Android Developers
java.security.cert ... ApplicationErrorReport, Describes an application error. ... provides static methods to dynamically create and access Java arrays.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found