gpt4 book ai didi

Android VerifyError 异常

转载 作者:太空狗 更新时间:2023-10-29 15:50:40 27 4
gpt4 key购买 nike

我在我的应用程序中使用指纹传感器。我知道 api 可用于 marshmallow 及以上操作系统。因此,在我的类里面运行时,我正在动态检查 sdk 版本。

即使指纹代码不执行,我在 4.0 android 操作系统上也面临以下异常,而同样的代码在 5.0 及更高版本上执行。

**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);
}
}

最佳答案

我也遇到了这个问题,另一个答案让我走上了正轨; 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 的捕获 block 从 (KeyPermanentlyInvalidatedException e) 更改为 (e instanceof KeyPermanentlyInvalidatedException) 似乎出于某种原因解决了这个问题。

关于Android VerifyError 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42023211/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com