You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓加密文本分享项目模拟器正常手机崩溃,报Base64类未找到异常

解决安卓实体机加密崩溃:java.lang.NoClassDefFoundError找不到java.util.Base64

这个问题我之前踩过坑!核心原因特别明确:java.util.Base64是Android API Level 26(也就是Android 8.0)才新增的类,你的模拟器大概率用了API 26+的系统镜像,所以运行毫无问题,但实体手机的系统版本低于Android 8.0时,系统里根本没有这个类,自然就抛出找不到类的异常了。

给你两个可行的解决方案,按需选择:

方案一:改用兼容全版本的安卓Base64类(推荐)

安卓从API 1开始就内置了android.util.Base64,这个类在所有安卓版本上都能正常工作,完全可以替代java.util.Base64的功能。你只需要做两个简单修改:

  1. 把代码里的import java.util.Base64;替换成import android.util.Base64;
  2. 调整Base64方法的调用参数(两者方法名和参数略有差异)

比如修改后的AES类核心代码示例:

import android.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;

public class AES {
    private SecretKeySpec secretKey;
    private Cipher cipher;

    public AES(String secret, int length, String algorithm) throws UnsupportedEncodingException, NoSuchAlgorithmException {
        byte[] keyBytes = secret.getBytes("UTF-8");
        // 这里根据算法长度截取密钥,比如AES-128取前16字节
        secretKey = new SecretKeySpec(keyBytes, 0, length / 8, algorithm);
        cipher = Cipher.getInstance(algorithm);
    }

    // 加密方法
    public String encrypt(String plainText) throws Exception {
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8"));
        // 用NO_WRAP避免生成换行符,更适合社交平台分享文本
        return Base64.encodeToString(encryptedBytes, Base64.NO_WRAP);
    }

    // 解密方法
    public String decrypt(String encryptedText) throws Exception {
        cipher.init(Cipher.DECRYPT_MODE, secretKey);
        byte[] encryptedBytes = Base64.decode(encryptedText, Base64.NO_WRAP);
        byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
        return new String(decryptedBytes, "UTF-8");
    }
}

方案二:限制最低支持API版本(不推荐,兼容性差)

如果你的项目只打算服务Android 8.0及以上的设备,可以在模块的build.gradle(或build.gradle.kts)里把minSdkVersion设置为26:

android {
    defaultConfig {
        minSdkVersion 26
        // 其他配置...
    }
}

但这种方式会直接排除掉大量低版本安卓用户,除非你的目标用户都是高版本设备,否则不建议这么做。

最后小提醒:可以在Android Studio的Logcat里查看实体手机的API等级,确认是不是系统版本过低导致的问题。

内容的提问来源于stack exchange,提问作者Shawal Msk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:31:37