Android使用Apache Commons Codec库,提
2019-11-01 本文已影响0人
PlainDev
前言
最近Android项目中使用到了RSA加密🔐,用到了
commons-codec
包,在进行单元测试时没有问题,但是在运行在真机上时却越到了错误❌
错误如下
java.lang.NoSuchMethodError: No static method encodeBase64String([B)Ljava/lang/String
提示找不到该方法,于是查了下资料,发现了原因,原来在Android
的Framework层
也引用了该库,运行时执行的是Framework层
中引用的库,报错应该是Framework层
引用的该库没有对应的该方法导致的。
解决方法
通过修改包名来解决,这里使用到的工具为jarjar.jar
下载地址为: https://code.google.com/p/jarjar/
然后下载要修改包名的jar包,这里使用commons-codec
包
下载地址为: http://commons.apache.org/proper/commons-codec/download_codec.cgi
修改名称为c1.jar
,运行以下命令即可
java -jar jarjar.jar process rule.text source/c1.jar result/my.jar
这里的rule.text
定义了修改规则,如下
rule org.apache.commons.codec.** org.apache.mybase64.@1
这句代表了将原包名org.apache.commons.codec
修改为org.apache.mybase64
具体的规则定义可以参考这篇文章
最后在result
文件夹可看到修改包名后的jar包
附录
所有的工具和替换好的jar包已放到github: https://github.com/plain-dev/modify-jar-package-name