Only splash displayed, then app closes. java.security.KeyException: Permantly failed to instantiate encrypted preferences
See original GitHub issueAvoid 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:
- Created 3 years ago
- Reactions:1
- Comments:17 (8 by maintainers)
Top GitHub Comments
Recovery:
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.