解决 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 无法使用 org.apache.commons.codec.binary.Base64 的问题)