android/Java NoClassDefFoundError 异常的出现及解决
这个异常出现的原因就是没找到对应的类。出现的场景:app-> a.jar -> b.jar :比如 App 里面调用了 a.jar 的东西,然后 a.jar 里面又调用了 b.jar的东西。在 android studio 里面, 都是通过 gradle 的 implemetation ‘xxx’ 的方式引入的。这时候就会发生 NoClassDefFoundError 的异常。(这个问
这个异常出现的原因就是没找到对应的类。
出现的场景:
-
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;
这样都不行。 因为无论是创建对象还是调用类方法,调用类成员,都会触发类加载。 而这个异常就是类加载不到的时候会出现的。
更多推荐
所有评论(0)