android/Java NoClassDefFoundError 异常的出现及解决

18 篇文章 0 订阅

这个异常出现的原因就是没找到对应的类。

出现的场景:
  • app-> a.jar -> b.jar :比如 App 里面调用了 a.jar 的东西,然后 a.jar 里面又调用了 b.jar的东西。在 android studio 里面, 都是通过 gradle 的 implemetation ‘xxx’ 的方式引入的。
    这时候就会发生 NoClassDefFoundError 的异常。
    (这个问题解决方案就是 在 App里面也去引用一下 b.jar. @ 考虑到编译打包优化的问题,可能会把不使用的类不打包进apk,最好主动触发一下 b.jar 里面的类加载。比如new 一个对象,调用一个静态方法之类的

  • 使用一些 动态jar包,通过 gradle compileOnly 的方式引入,但是实际上对应的 jar不存在,这时候也会发生该异常。

  • 待补充…

临界点:

只要出现上面说的 app -> a.jar -> b.jar 就会发生这种异常吗?
不是的,必须是 app 里面通过 a.jar 调用了 b.jar 里面的类了才会发生异常。

举个例子: 假设依赖 jar 里面有个类叫做 Fake (Fake.java) ,然后你在 App 里面的自己的类里面 定义了有个变量 Fake ff = null; 这时候并不会出现这个异常。但是,如果你是创建这个类的对象,或者调用了里面的静态方法就会出现这个异常了。比如你写了 Fake ff = new Fake(...); , 或者是 Fake.callStaticFunc(...); 无论是哪一种。甚至是 int state = Fake.DEFAULT_INT; 这样都不行。 因为无论是创建对象还是调用类方法,调用类成员,都会触发类加载。 而这个异常就是类加载不到的时候会出现的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值