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

Android低版本下从com.auth0.jwt.JWT迁移至io.jsonwebtoken.Jwts求助

解决Android 26以下版本JWT创建兼容问题(迁移到JJWT库)

问题原因

你使用的com.auth0.jwt库依赖Java 8及以上特性,而Android 26以下版本对Java 8特性支持不完善,导致JWTCreator类无法被加载,抛出NoClassDefFoundError异常。

迁移到io.jsonwebtoken(JJWT)库的实现步骤

1. 添加依赖

在Module级别的build.gradle中引入JJWT的依赖:

implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
implementation 'io.jsonwebtoken:jjwt-impl:0.11.5'
implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5'

2. 替换原有代码

JJWT的API风格与auth0库接近,以下是对应你原有逻辑的实现:

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.util.Date;
import java.nio.charset.Charset;

// 生成JWT令牌的方法
String generateToken(long time, Object claim) {
    // 将字符串密钥转换为JJWT所需的SecretKey对象
    byte[] keyBytes = "my secret key".getBytes(Charset.forName("UTF-8"));
    
    return Jwts.builder()
        // 设置过期时间,对应原代码的withExpiresAt
        .setExpiration(new Date(System.currentTimeMillis() + time))
        // 添加自定义Claim,对应原代码的withClaim
        .claim("myClaim", claim)
        // 可继续添加其他自定义Claim
        // .claim("anotherClaim", anotherValue)
        // 使用HMAC256算法签名,传入密钥和指定算法
        .signWith(Keys.hmacShaKeyFor(keyBytes), SignatureAlgorithm.HS256)
        // 生成最终的JWT字符串
        .compact();
}

关键API对应说明

  • Jwts.builder() 等价于原库的 JWT.create()
  • setExpiration(Date) 等价于原库的 withExpiresAt(Date)
  • claim(String, Object) 等价于原库的 withClaim(String, Object)
  • signWith(SecretKey, SignatureAlgorithm) 等价于原库的 sign(Algorithm.HMAC256(...))

兼容注意点

  • 用Charset.forName("UTF-8")替代StandardCharsets.UTF_8,适配Android 26以下版本
  • 移除原有com.auth0.jwt的依赖,避免类冲突

内容的提问来源于stack exchange,提问作者Andrei Naumets

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:22:34