原因:com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException:协议消息包含无效标签(零)

问题描述 投票:0回答:4

启动活动时,我的应用程序在 getEncryptedSharedPrefs 处崩溃:

    if(getEncryptedSharedPrefs().getString("pinSettingsLogin", "")!!.isEmpty()){
        getEncryptedSharedPrefs().edit()
            .putString("pinSettingsLogin" , "0000")
            .apply()
    }

出现此错误:

Caused by: com.google.crypto.tink.shaded.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).

奇怪的是,这个 if 语句适用于 Android 10 和 11,但不适用于 Android 12。这个 if 语句在这里是因为在下面的“if”中,我检查 pinSettingsLogin = 0000 是否这样,以便它自行进入一个新活动.

    if(getEncryptedSharedPrefs().getString("pinSettingsLogin", "").equals("0000")){
        val i = Intent(this, SettingsActivity::class.java)
        startActivity(i)
        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left)
    }
android android-studio kotlin
4个回答
13
投票

这是

EncryptedSharedPreferences
的一个错误,问题发生在
EncryptedSharedPreferences
的初始化上。

查看这里


8
投票

您是否尝试过清除应用程序的缓存?

这可能会解决问题!


0
投票

我在 1.0.0rc-04 中遇到了这个问题。我可以通过升级到 1.1.0-alpha01 来改进它吗?


-1
投票
 implementation "androidx.security:security-crypto:1.1.0-alpha04"

按照文档中给出的方式初始化共享首选项:

 val keyGenParameterSpec = MasterKey.Builder(activity)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()

        val sharedPref : SharedPreferences = EncryptedSharedPreferences
.create(activity,"secret_shared_prefs", keyGenParameterSpec, EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
            EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM)
© www.soinside.com 2019 - 2024. All rights reserved.