安卓:No static method decodeBase64
造成主要原因
1.导入的commons-codec的jar包与项目里的第三方sdk(比如微信和qq第三方登陆重复)
2.安卓framework里也含有此jar包,这是最主要原因,也是我项目中的报错原因
调用代码
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKey));
我项目里还导入了commons-io的jar包用于与服务器进行密码的加解密,publickey是解密后获取的公钥,用于加密密码,关键报错的是这句代码中的Base64.decodeBase64(publickey)
错误
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)
没有这个静态方法,但是编译能过,不报错。真机运行就报错,原因上面已经说明了,安卓在framework里的httpclient里也有相同的包,而且不包括这个静态方法,而且这个版本相当古老,并且覆盖了自己导入的版本,所以报错。
解决方法
之前自己搜索的资料里基本是用安卓的Base64来代替解决问题,但是每个人写的项目业务逻辑是不同的,比如我项目中的加解密是不能用安卓的Base64来完成的,还有的解决方法是修改common-codec jar里包的包名和目录结构,这个过程比较繁琐但是可行,包名不一样谈何覆盖。下面我来提供一个最简单的方法。