估计不少coder friends 在开发android或java项目时都有过自己打jar包给别人使用的经历,这其中有一些人可能跟我一样在打jar包时会遇到一个问题:在打jar包的整个过程中一切正常,如果这个jar里的源代码都是自己所写(没有单独引用第三方开源库),那么不出意外的话这个jar就能正常在apk中使用,但是如果我的jar里又引用了其他的jar(或者直接在maven,gradle等构建工具中集成开源库),那么在apk中使用我们的jar包时可能会报错:"java.lang.NoClassDefFoundError....",这个异常一般指向的是你引用的第三方开源库。这时你很奇怪:这个类怎么可能没定义?这个第三方的开源库明明就在啊?而且我在代码里还能正常使用,写代码时编辑器(比如intellij idea或android studio等)还能自动提示补全呢。当你确定了报错中指向的类确实存在时,这时你就可以考虑报这个错的原因可能是因为打jar包存在问题了。如果你只关心我怎么解决这个问题而不关心我分析出现问题的过程,那么请直接跳到下面"解决过程"的部分。
也可以先看看这个,可能更好点(https://blog.csdn.net/Builder_Taoge/article/details/81183871).
分析过程
这一部分写了一大堆可能感觉是废话的内容,因为真正解决问题的步骤还是下面"解决过程"那一部分。不过这是我遇到这个问题的分析过程,之所以写出来是想给各位一个思路,因为我的这篇文章里说的方式也可能解决不了你的问题,假如确实没有解决你的问题,也许你可以通过我这个分析过程得到一些启发,从而自己找到了适合的解决方式,这才是我写这段的目的。下面开始叙述我的分析过程:
显然,如果这个类确实有,那么还报这个错的话基本上可以断定是这个类文件根本没有被打包进你的jar包,所以程序找不到这个类。你可能感觉有点啰嗦了,会说:我当然知道这个第三方的开源库没有打进我的jar包,因为解压我的jar包后只能看到我自己写的源文件编译成的class文件[捂脸.png],关键是为什么以及怎么解决啊?
好吧,惭愧的是我现在也没完全确定是不是我想的这样,只是在猜测阶段,不过问题确实是通过这种方式解决了。因为我对gradle&#x