【问题标题】:'java.lang.NoClassDefFoundError Failed resolution of Ljava/util/Base64 caused by java.lang.ClassNotFoundException Didn't find class "java.util.Base64"'java.lang.NoClassDefFoundError 由 java.lang.ClassNotFoundException 导致的 Ljava/util/Base64 解析失败找不到类“java.util.Base64”
【发布时间】:2021-05-17 11:54:42
【问题描述】:

我收到了这个错误,我已经读过要解决它,我必须用 import android.util.Base64 替换 import java.util.Base64 但在我的整个项目中,我只发现了 Base68 result = Base64.getEncoder().encodeToString(macData); 的唯一用法 我应该如何解决?而且我不能用 android.util.Base.64 替换 java.util.Base64 因为这行代码在后端

【问题讨论】:

  • 检查整个堆栈跟踪,它通常会向您显示正在尝试加载的内容(至少指向正确的方向)。您使用的某些库也很可能引用了该类。

标签: java android android-studio kotlin


【解决方案1】:

很不幸 - 这意味着您正在使用某个库,而 那个 库正在尝试使用 java.util.Base64。 Android 采用了当 android 发布时的 Java 库,现在,这已经是很久以前的事了。从那以后,它们还没有真正更新过。 (那个 oracle v google 的法庭案件可能没有帮助......)

j.u.Base64 被添加到java release 8 中(有关此信息,请参见 javadoc 中的“since”行;任何“1.6”或更低版本,或者如果没有“since”行,在 android 上肯定是可用的。其他事情通常不是)。 java 8 现在已经 7 岁了,所以不是专门为 android 设计的库越来越有可能开始使用这些非 android 库调用。

检查堆栈跟踪,您会找到执行此操作的库。恐怕除了停止使用这个库之外别无他法。您可以尝试在您的应用程序中添加一个 j.u.Base64 impl,但这会比较棘手,因为这可能涉及一些法律问题,因此,要么没有人这样做,要么他们可能不会公开如何做。

您可以要求这个库使用第三方库来完成 base64 工作,但他们可能不想这样做,而且这可能不是导致它无法在 android 上运行的库的唯一问题。

如果 android 变体是一个替代品,你可以重写这个库的类文件,但这也是一个有点笨拙的、hacky 的概念,并不是很难,但因为这不是一件正常的事情,而且通常非常不喜欢,我认为您无法轻松找到有关如何操作的文档。

因此,建议:尝试寻找另一个库。

【讨论】:

  • 仅供参考:Android 获得了 API 级别 26 的 java.util.Base64,即 Android 8.0。不幸的是,Android 经常落后于 Java SE 版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多