2017-01-17 13 views
0

일부 문자열 값을 암호화하기 위해 Android KeyStore API 호출을 사용하여 앱을 개발 중입니다. API 레벨 18 이상을 타겟팅하고 있습니다. 23. 내 문제까지 API 레벨 18을 대상으로 내 코드의 다른 블록 I 중 하나가 사용되지 않는 방법으로 블록에서 호출을 사용할 필요가 있다는 것입니다 경우 나는이 (아래 내 경우 블록)키 스토어 android를 사용합니다. 버전 18 이상을 타겟팅합니다. deprecated 메소드 호출을 사용해야합니까?

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

새로운 API 레벨 23 코드로 else 블록을 포함하면 두 가지 방법으로 모두 수행 할 수 있습니다.

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+ 
} 
+0

그래도 .build() 메소드 호출 이벤트는 올바른 API 레벨을 타겟팅하고 있습니다. 그게 약간의 걱정이야. –

+1

취소 선은이 방법이 더 이상 사용되지 않으며 향후 중단 될 수 있음을 나타냅니다. 그건 당신이 지원하는 API 레벨과 아무 관련이 없습니다. 그러나 Lint 오류를 억제하려면 @TargetApi 주석을 사용하여이 API가 실행되도록 설계된 최소 SDK를 나타낼 수 있습니다. 안드로이드는 실제로 비추천 API를 잘라내는 데 몇 년이 걸리기 때문에 걱정할 필요가 없습니다. 최신 API로 마이그레이션 할 수있는 합리적인 시간이 되었으면합니다. – Dibzmania

+0

지원되는 API 수준에서 실행되고 오류 검색을 위해 linting에 의존하지 않는 한 괜찮습니다. '// noinspection deprecation'을 사용하여 아래 명령문에 대한 검사를 비활성화하십시오. – Ryan