解决 android 无法使用 org.apache.commons.codec.binary.Base64 的问题

有些加密算法会用到 org.apache.commons.codec.binary.Base64 这个类的编码解码方法, android SDK 里不包含 org.apache.commons.codec 库。而服务器端一般都使用这个库,android 为了保持同步,也要使用这个库,那就要去添加依赖。

但 org.apache.commons.codec 这个库 groupid 非常诡异:“common-codec”,maven 可以直接添加依赖,Gradle 却无法添加。

只好去 http://archive.apache.org/dist/commons/codec/binaries/ 下载对应版本(主要是和后端同步)的文件,解压后拿出对应的 jar 包,放在 lib 文件下使用。跑一下单元测试,妥妥的过了。以为一切问题都风清云淡,但项目里真机一测试,还是报错:

java.lang.NoSuchMethodError: No static method decodeBase64(Ljava/lang/String;)[B in class Lorg/apache/commons/codec/binary/Base64; 
or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)

提示没有对应的静态方法,原因是 android 系统 framework 层也使用了org.apache.commons.codec 库,运行时调用的是 framework 层的库,根本没调我们添加到 lib 里的 jar 包。 错误应该是 framework 使用的库对应的 Base64 没有对应的静态方法。

没办法,只有自己改包名了。

修改包名的方法见:https://www.cnblogs.com/yejiurui/p/4283505.html

改完名后加入项目,使用的地方 import 我们修改后的包。跑一下单元测试,过了。项目运行,也过了,风清云淡。

如果 language 下文件报错,直接删掉 language 包。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,401评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,108评论 2 59
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,246评论 19 139
  • 个人专题目录 Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。下...
    Java及SpringBoot阅读 3,429评论 0 5
  • 生命陪伴心语系统: (当下)此刻就是支持我成长的最大机会 (过程)我看见了我的情绪和想法,这不过是情绪和想法而已,...
    万新玲阅读 138评论 2 4