未解决的引用:MasterKey

6

我正在尝试按照这里给出的示例操作:

https://developer.android.com/topic/security/data

我已经在我的gradle中包含了所需的库:

implementation "androidx.security:security-crypto:1.0.0"

// For Identity Credential APIs
implementation "androidx.security:security-identity-credential:1.0.0-alpha02"

然而,当我尝试使用这段代码时:

val mainKey = MasterKey.Builder(applicationContext)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

我收到了“未解决的引用:MasterKey错误”的错误。 这个库中是否完全包含该类?
提前致谢。
3个回答

7

将库升级到最新版本(此时写作时为1.1.0-alpha03)

implementation "androidx.security:security-crypto:1.1.0-alpha03"

根据 发布说明MasterKey 已添加至版本 1.1.0-alpha01。
Version 1.1.0-alpha01
...
New MasterKey class provides more options for keys, also deprecating MasterKeys to support new features and versions of Android that do not have KeyGenParamSpec.

4
利用Jie Heng回应中的钩子... MasterKey API 已经添加到 security-crypto1.1.0-alpha01 版本中的 androidx.security 包中(您可以在此处访问此库的版本here)。
如果您采用了由Jie Heng提供的solution informed by Jie Heng,您将会成功。
但是,如果您正在使用支持Android API 23(也称为Android Marshmallow或只是Android 6)的Android项目...
这应该是没有问题的,正如official documentation所述。文档展示了如何使用EncryptedSharedPreferencesEncryptedFile API...
如果您选择将minSdkVersion设置为23,则会注意到该项目甚至无法编译。

这就是我的情况!

我所在的项目支持从Android API级别23开始。

因此,我应用了以下更新AndroidManifest.xml中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="...">

    <uses-sdk tools:overrideLibrary="androidx.security.identity.credential" />
...

这个项目运行顺利,包括在Android API 23上(在AVD API 23上)。

注意: 另一个选择是使用 MasterKeys API而不是MasterKey。但要注意,MasterKeys已被弃用。


1

只需使用val mainKey = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)。 MasterKey仅处于alpha版本,因此将MasterKeys标记为弃用似乎过早了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接