解决Android无法使用Apache的Base64的问题,安卓不能使用org.apache.commons.codec.binary.Base64 的问题

本文介绍了当Android应用中出现因系统framework层与自定义库中Base64方法冲突时的两种解决方案:一是统一使用java.util.Base64;二是通过jarjar工具修改Apache Commons Codec库的包名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为 android 系统 framework 层也使用了org.apache.commons.codec 库,运行时调用的是 framework 层的库,没有加载我们添加的包,导致我们不能使用该库的方法。我们通常做RSA加密会用到Base64,从而导致冲突。

方案一

使用java自带base64 (java.util.Base64),远端也要同样使用java.util.Base64兼容安卓端

方案二

修改Apache code库的包名

工具:jarjar.jar
下载地址:https://www.jb51.net/softs/577289.html

在这里插入图片描述

jarjar使用教程:https://www.cnblogs.com/yejiurui/p/4283505.html

工具使用:
  1. cmd输入 查看jar包所有包名
java -jar jarjar.jar strings commons-codec-1.15.jar
  1. 新建一个rule.txt
    在这里插入图片描述

  2. rule.txt 内容
    在这里插入图片描述
    表示修改包名为org.apache.commons.android.*
    具体意思看jarjar使用教程

  3. cmd输入

java -jar jarjar.jar process rule.txt commons-codec-1.15.jar commons-codes-android-1.15.jar

开始生成新的包

在这里插入图片描述

### 使用 `org.apache.commons.codec.binary.Base64` 进行编码解码 为了在 Java 中使用 Apache Commons Codec 库中的 `Base64` 类进行字符串的编码和解码操作,可以遵循以下方法。 #### 添加 Maven 依赖 首先确保项目中包含了必要的库依赖。对于 Maven 构建工具而言,可以在项目的 pom.xml 文件中加入如下配置来引入 commons-codec: ```xml <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency> ``` 此版本兼容大多数应用场景并解决了部分已知错误[^3]。 #### 编写编码函数 下面是一个简单的例子展示如何利用该库实现 BASE64 的编码功能: ```java import org.apache.commons.codec.binary.Base64; public class Base64Util { public static String encode(String input){ byte[] encodedBytes = Base64.encodeBase64(input.getBytes()); return new String(encodedBytes); } } ``` 这段代码定义了一个静态方法用于接收待编码的原始字符串参数,并返回经过 BASE64 处理后的结果字符串形式[^2]。 #### 实现解码逻辑 同样地,也可以创建一个对应的解码器来进行相反的操作——即把之前通过上述方式得到的加密串还原成初始状态的数据流或文本表示: ```java import org.apache.commons.codec.binary.Base64; public class Base64Util { public static String decode(String base64EncodedInput){ byte[] decodedBytes = Base64.decodeBase64(base64EncodedInput.getBytes()); return new String(decodedBytes); } } ``` 这里实现了另一个名为 `decode()` 的公共成员函数负责接受已经过 BASE64 转换过的输入作为参数,最终输出其对应的实际含义内容。 需要注意的是,在实际应用过程中可能会遇到诸如 `NoSuchMethodError` 错误的情况,这通常是由于不同版本之间 API 变更所引起的不匹配现象所致;因此建议开发者们务必确认使用的类库版本与其应用程序环境相适应以避免此类异常的发生[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值