美文网首页
阿里一键登录java.lang.NoSuchMethodErro

阿里一键登录java.lang.NoSuchMethodErro

作者: 木易杨yang | 来源:发表于2021-11-19 11:20 被阅读0次

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

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

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

    相关文章

      网友评论

          本文标题:阿里一键登录java.lang.NoSuchMethodErro

          本文链接:https://www.haomeiwen.com/subject/irbstrtx.html