instant run 导致 ClassNotFoundException ,意外吧?


Bug场景:

adb调试时 ,apk正常安装运行无问题。这个问题困扰了我1天。

然而我将apk移动到手机,手动安装运行时就会爆出ClassNotFoundException,异常日志如下:

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.wyb.arcgislocation1029.MapActivity" on path: DexPathList[[zip file "/data/app/com.example.wyb.arcgislocation1029-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.wyb.arcgislocation1029-1/lib/arm, /data/app/com.example.wyb.arcgislocation1029-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]


查到的原因和解决办法:

我查边所有资料,有很多说法:

1、 manifest中name路径书写不对的,但是这会在studio自动检查语法时就会报红,排除。

2、引用相同包,但版本不同。我没有引用包。

3、so包引用时,两个第三方库的 so包冲突:

成因第一部分:当项目里有arm-v7目录时,系统会严格遵循最优适配原则,当遇到arm-v7的cpu时,只去arm-v7目录查找so库。

成因第二部分:merge原则,当打包时,studio会把各个module进行合并,例如manifest文件。它也会合并arm-v7目录,可以想象——如果第三方依赖A和B,A指定了arm-v7里的so包,B没有指定arm-v7里的so包,那么合并的结果时最终的apk里的arm-v7目录里只有A的so包。

于是在遇到arm-v7的cup时,B就悲催的找不到自己的so包了——找不到类。


真实原因和解决办法:

但是我的问题都不是这些导致的。真正的原因很无奈,是studio的 Instant Run 功能导致的。

这个功能在我之前使用的studio版本里并没有,所以它里面具体做了什么,我并不清楚 ,我只是怀疑它坏了我的事。所以把它关了。

关闭流程:file——setting——build、execution、deployment——Instant Run

然后我的apk就可以正常手动安装运行了。


结语:

对工具和api的更新要有所了解,对新功能要选择性的使用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值