2017-02-03 2 views
1

내 응용 프로그램에 지문 센서를 사용하고 있습니다. api가 marshmallow 및 OS보다 더 많이 사용 가능하다는 것을 알고 있습니다. 그래서 내 수업을 실행하는 동안 동적으로 SDK 버전을 확인하고 있습니다.Android VerifyError 예외

지문을 실행하지 않는 코드도 5.0 이상에서는 실행되지만 4.0 android os에서는 예외가 발생합니다.

**java.lang.VerifyError: com/cloudzon/gratzeez1/GiveGratuityActivity 
                     at java.lang.Class.newInstanceImpl(Native Method) 
                     at java.lang.Class.newInstance(Class.java:1215) 
                     at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2265) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
                     at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342) 
                     at android.os.Handler.dispatchMessage(Handler.java:110) 
                     at android.os.Looper.loop(Looper.java:193) 
                     at android.app.ActivityThread.main(ActivityThread.java:5322) 
                     at java.lang.reflect.Method.invokeNative(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:515) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
                     at dalvik.system.NativeStart.main(Native Method)** 

다음 코드로 인해이 문제가 발생했습니다.

public boolean cipherInit() { 
    try { 
     cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7); 
    } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { 
     throw new RuntimeException("Failed to get Cipher", e); 
    } 

    try { 
     keyStore.load(null); 
     SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME, 
       null); 
     cipher.init(Cipher.ENCRYPT_MODE, key); 
     return true; 
    } catch (KeyPermanentlyInvalidatedException e) { 
     return false; 
    } catch (KeyStoreException | CertificateException | UnrecoverableKeyException | IOException | NoSuchAlgorithmException | InvalidKeyException e) { 
     throw new RuntimeException("Failed to init Cipher", e); 
    } 
} 
+0

"bcz"란 무엇입니까 ?? – Doomsknight

+0

지금 확인하십시오 –

+0

동일한 코드가 5.0에서 제대로 작동합니까? –

답변

2

나는이 문제에 부딪 쳤고 또 다른 대답은 올바른 길로 나를 잡았다. How to Use Unsupported Exception for Lower Platform Version

나는 그 방법을;

public boolean cipherInit() { 
    try { 
     cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/" + KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7); 
    } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { 
     throw new RuntimeException("Failed to get Cipher", e); 
    } 

    try { 
     keyStore.load(null); 
     SecretKey key = (SecretKey) keyStore.getKey(KEY_NAME, null); 
     cipher.init(Cipher.ENCRYPT_MODE, key); 
     return true; 
    } catch (Exception e) { 
     if(e instanceof KeyPermanentlyInvalidatedException) 
      return false; 
     else if(e instanceof KeyStoreException|e instanceof CertificateException|e instanceof UnrecoverableKeyException|e instanceof IOException|e instanceof NoSuchAlgorithmException|e instanceof InvalidKeyException) 
      throw new RuntimeException("Failed to init Cipher",e); 
    } 
    return false; 
} 

(KeyPermanentlyInvalidatedException 전자)에서 KeyPermanentlyInvalidatedException에 대한 catch 블록을 변경 어떤 이유로 문제를 해결 듯 (KeyPermanentlyInvalidatedException instanceof를 전자) 합니다.

+0

에서이 오류는 처음으로이 오류를 우회합니다. 아무도 여기에 대한 답을 갖고있는 것 같지 않습니다. 클래스의 새 인스턴스를 만들 때 내 응용 프로그램 모듈에서 가져 오는 사람 –

+0

오류가 Android 프로젝트에 Cipher 및/또는 Fingerprint 코드를 추가하는 것과 관련이 없다면 새로운 질문을 열 것을 제안합니다. – opt05

+0

내 동일한 문제를 해결하기 위해 노력하고 있습니다. 고마워. – Kalanidhi