java.lang.IllegalAccessError: Illegal class access安卓报错记录

2 篇文章 0 订阅
1 篇文章 0 订阅

前言

首先我遇到的报错全称是:如果不太一致的小伙伴可以略过了,但是看完应该对你有点帮助,如果你是安卓开发的话。

java.lang.IllegalAccessError: Illegal class access: 'com.mcd.library.rn.RNPresenter' attempting to access 'com.tencent.lbssearch.object.param.SearchParam$a' (declaration of 'com.mcd.library.rn.RNPresenter' appears in /data/app/com.mcdonalds.app-E8j3KjvAI3oLoteK5WMbBQ==/base.apk!classes29.dex)

遇到的场景是本人在项目中调用了腾讯地图sdk,其中有个地址搜索的功能,在使用这个方法的时候,传参过程中报了错,直接崩溃。
人家这大厂sdk那么多人用,肯定从自身找问题。但是代码几乎一模一样,怎么会报错呢?只能从报错日志开始分析。

历程

这个报错的内容还好理解,其实就是我使用的RNPresenter这个类里在使用腾讯地图sdk下的SearchParam&a没有找到,而且声明了在某dex中没有找到。奇了怪了,还有sdk没有被打进dex的说法?我在打包方面还是个小白,我不懂不在同一个dex会怎样,但是直觉告诉我,应该不是打包的问题,毕竟用了那么多的sdk。

百度了一圈,有个老哥的回答说是自定义了classloader导致打包不在一起啥的问题,看到这里,我心想难不成瞬间打脸?
同事用了反编译工具,拿到刚打好的包拆了一下,唔,这个SearchParam就安安静静地躺在这里,这个a是什么?是里面的一个接口,我并没有在意。等等!是a没有找到吧?!

顺着这个思路翻了翻国外的看法,看到一篇文章有了眉目!原文我忘了在哪,大概意思就是在使用Kotlin的时候要注意和java的交互,因为很多Java中喜欢使用默认的关键字protected,而kotlin中并没有protected,会改成private。

好了,看到这里,基本上预料到了自己的错误原因,这个提醒之前就有见过,但是没有想到自己在这里遇到了这个问题。因为我是在kotlin中写的,而腾讯sdk是Java,并且不出所料的是a是SearchParam的一个接口,默认protected。

后记

所有的谜团都水落石出,望着用了一下午找到的突破口,好像一切那么难,一切又那么合理,一切的错误都是有根源的,只是看能否仔细发现。感谢我的同事冬哥百忙之中帮我查看这个问题,没有他的帮助,现在还在摸索中。果不其然,换了java调用sdk之后就没有这个错了,一些使用如初。

这里还要记录一下,在使用kotlin调用sdk的时候,打了release包并没有报错,而debug包报错,这点一直不理解,困惑着我,为啥呢?

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KIDD-4869

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值