9

在一个 Android Kotlin 项目中,我使用androidx.security库基于此链接实现了 EncryptedSharedPreference 功能,它在调试模式下运行良好。但在发布模式下,我不断收到此错误

  java.lang.ExceptionInInitializerError
    at com.package_name.i.a.f(:46)
    at com.package_name.i.a.j(:52)
    at com.package_name.i.a.e(:82)
    at com.package_name.MyApplication.onCreate(:37)
    at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707)
    at android.app.ActivityThread.-wrap1(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.RuntimeException: Field keySize_ for k.a.d.a.h0.u not found. Known fields are [private int k.a.d.a.h0.u.i, private static final k.a.d.a.h0.u k.a.d.a.h0.u.j, private static volatile k.a.d.a.i0.a.a1 k.a.d.a.h0.u.k]
    at k.a.d.a.i0.a.v0.n0(:608)

请分享您对如何解决此错误的想法。

4

5 回答 5

6

此错误与 Minify Enabled 有关,这很可能导致某些值被删除。

已经报告了一个错误,您可以在此处跟踪它:

https://issuetracker.google.com/issues/157983099

于 2020-06-04T07:36:46.697 回答
5
-keep class com.google.crypto.** { *; }
于 2020-07-21T11:36:11.800 回答
2

5 月 20 日的 rc2 版本的 android crypto 有问题。所以最好在你的 gradle 文件中使用 1.0.0-alpha02。请记住,请注意不在 rc 中的依赖项。您还可以使用 proguard 规则解决问题(请参阅 Sebas LG 的评论)。

dependencies {
    implementation "androidx.security:security-crypto:1.0.0-alpha02"
}

官方文档:https ://developer.android.com/jetpack/androidx/releases/security

链接提交:https ://android.googlesource.com/platform/frameworks/support/+log/f66cdf1658639bd74ae850dfe3c1f5bb72eaebe6..6be101c2241593fee3ef9ab4e1fb337b485f2f9a/security/crypto

于 2020-06-03T20:17:56.670 回答
2

我解决了使用

dependencies {
..
   implementation "androidx.security:security-crypto:1.0.0-rc03"
于 2020-08-28T09:44:57.893 回答
1

这是因为 AndroidX 安全库使用了 Google Tink 库(这已在 Tink 1.4.0 中修复),在使用 Proguard 时存在缺陷。

将此代码添加到proguard-rules.pro这应该会有所帮助:

-keepclassmembers class * extends com.google.crypto.tink.shaded.protobuf.GeneratedMessageLite {
  <fields>;
}

链接:

https://github.com/google/tink/issues/361 https://github.com/google/tink/blob/master/java_src/src/main/resources/META-INF/proguard/protobuf.pro

于 2020-08-01T07:54:26.447 回答