我正在使用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及以上?
提前致谢!
答案 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+
}