阿里一键登录java.lang.NoSuchMethodError: no non-static method “Lcom/mobile/auth/gatewayauth/model/RStruct;

先说结果,加入下列混淆:

-keep class org.json.** {
   *;
}

记录下排除步骤

在集成阿里云登录的时候,不混淆的情况不会出现,但开启混淆后就报下面代码

java.lang.NoSuchMethodError: no non-static method "Lcom/mobile/auth/gatewayauth/model/RStruct;.toJson()Lorg/json/JSONObject;" at com.mobile.auth.gatewayauth.utils.EncryptUtils.encryptToken(Native Method) at com.mobile.auth.gatewayauth.utils.TokenGenerator.assembleToken(Native Method) at com.mobile.auth.gatewayauth.utils.TokenGenerator.a(Unknown Source:21) at com.mobile.auth.gatewayauth.manager.TokenMaskManager.a(Native Method) at com.mobile.auth.gatewayauth.manager.TokenMaskManager.a(Unknown Source:0) at com.mobile.auth.gatewayauth.manager.TokenMaskManager$11.a(Unknown Source:36) at com.mobile.auth.gatewayauth.manager.TokenMaskManager$11.a(Unknown Source:2) at com.mobile.auth.ak.d.a(Unknown Source:140) at com.mobile.auth.ak.d$b.run(Unknown Source:27) at java.util.concu 2021-05-13 18:25:05.186 4749-5857/com.

首先想到的是 会不会是一键登录混淆代码没加?

然而在查看官方文档发现无需添加,查看了下阿里云的arr包发现确实添加了混淆代码官方文档
各种尝试无果后觉得还是得反编译看下,由于代码提示

"Lcom/mobile/auth/gatewayauth/model/RStruct;.toJson()Lorg/json/JSONObject;"
at com.mobile.auth.gatewayauth.utils.EncryptUtils.encryptToken(Native Method)

首先是担心是native方法给混淆了(其实想想提示也不会是native方法),就找到EncryptUtils类看下反编译代码,发现没啥问题
在这里插入图片描述
然后查看RStruct类 发现了问题点

在这里插入图片描述
aar源码
在这里插入图片描述
其中有个JSONObject给混淆了,然后回想起jni中,c层调java层代码不单止要指定类路径 还要指定方法的参数和返回值否则回找不到
由于返回类型给混淆到了所以会提示找不到非静态的toJson方法

解决方法就是不混淆org.json.JSONObject文件

-keep class org.json.** {
   *;
}

其实想想也不应该,排查了这么久,看提示就很明显了,大意了没有闪。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值