使用keystore android。定位版本18及更高版本。必须使用弃用的方法调用吗?

时间:2017-01-17 10:53:13

标签: android android-keystore android-api-levels

我正在使用Android KeyStore API调用开发一个应用来加密一些字符串值。我的目标是API级别18及以上。我的代码中有一个if else块,其目标是API级别18到23.我的问题是我要么必须在块中使用已弃用的方法调用(如下所示是我的if块)

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 &&
            Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {

       KeyPairGenerator kpg = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore");

       kpg.initialize(new KeyPairGeneratorSpec.Builder(alias, keyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
       .setDigests(KeyProperties.DIGEST_SHA256,KeyProperties.DIGEST_SHA512)
       .build());

       KeyPair kp = kpg.generateKeyPair();
     }

这会在IDE中显示一条直线,因为不推荐使用方法调用。但是,它确实针对此代码构建为运行的api级别?

如果我切换到KeyGenParameterSpec.builder(),我会收到编译时错误,因为此对象只能在API级别23及更高版本上使用。我的应用针对API等级18及以上?

有没有办法在我的KeyStore中生成密钥对条目,而不使用已弃用的方法调用或必须移至API级别23及以上?

提前致谢!

1 个答案:

答案 0 :(得分:0)

只需添加一个else块,其中包含新的API级别23代码,以便您可以双向完成!

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 &&
            Build.VERSION.SDK_INT < Build.VERSION_CODES.M){
    // deprecated code on 23
}else{
    // new code for 23+
}