android - 在设备上找不到decodeHex方法,但在模拟器上工作

标签 android android-emulator apache-commons

我正在进行RSA加密的项目,需要使用Apache commons-codec中的方法,即:

  • Hex.encodeHex(byte[])
  • Hex.decodeHex(String)

这两种方法在 Android 模拟器上都可以正常工作,但在设备上会返回 NoSuchMethodError

public String RSADecrypt(final String message) {
        try {
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, getPrivateKey());
            byte[] decryptedBytes = cipher.doFinal(Hex.decodeHex(message));
            return new String(decryptedBytes);
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (DecoderException e) {
            e.printStackTrace();
        }
        return "";
    }
java.lang.NoSuchMethodError: No static method decodeHex(Ljava/lang/String;)[B in class Lorg/apache/commons/codec/binary/Hex; or its super classes (declaration of 'org.apache.commons.codec.binary.Hex' appears in /system/framework/org.apache.http.legacy.boot.jar)
  • 我的模拟器在 Pie、Oreo 和 Nougat 上运行
  • 我的设备在 Nougat & Marshmallow 上运行

最佳答案

某些 Android 版本包含旧版本的 Apache commons-codec 库 (1.3),其中尚不存在 decodeHex(String) 方法。尝试改为调用 decodeHex(char[])。 IE。像这样修改你的代码:

byte[] decryptedBytes = cipher.doFinal(Hex.decodeHex(message.toCharArray()));

这应该适用于 commons-codec v1.3。

关于android - 在设备上找不到decodeHex方法,但在模拟器上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556627/

相关文章:

Android Studio(测试版)0.8.14 - 无法启动模拟器

java - Apache Commons 是否适用于所有服务器?

java - 在 java 日志框架场景中寻找方法

java - 当我声明为浅色主题时,为什么我会得到深色主题?

android - 如果 API 为 11 或更高,如何检查设备的 API 级别并使用 Actionbar?

android - MvvmCross Android ImageView绑定(bind)图片src

android - 从源代码构建 Android 后运行模拟器

android - 如何在 Android 模拟器上模拟硬件媒体控制按钮

java - 如何对 "toString()"GWT EntityProxy derivatives进行日志记录和调试?

android - 无法使用融合位置 API 停止位置更新