阿里一键登录java.lang.NoSuchMethodErro

2021-11-19  本文已影响0人  木易杨yang

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

-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.** {
   *;
}

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

上一篇下一篇

猜你喜欢

热点阅读