运行时的NoClassDefFoundError在Android Studio中的.AAR类中

时间:2015-02-06 02:40:10

标签: java android android-studio gradle aar

我一直在研究一个可能的解决方案,但无论我尝试它只是失败。以下是解释的情况:

我在Android Studio上有这个库项目,它生成app-debug.aar文件。 然后我在实现项目中添加这个新模块,按照向导导入.JAR / .AARs我选择.aar并更新项目结构中:app的依赖项。

清理项目后(即使使用./gradlew clean - Mac OS X),我可以在任何活动中引用此类及其方法。

现在,在运行时,一旦在真实设备上构建并安装,应用程序将崩溃,从而导致上述运行时异常。

注意:我正在导入.aar因为我需要保护代码并且它有资源,所以.jar是不可能的。如果我导入库模块(使用源代码而不是.aar),则应用程序在运行时没有问题。

我已经尝试了一切,如果有人可以对这可能会有所了解,我们将非常感激。

该类扩展ViewGroup并在运行时实例化,以防任何事情。代码是给我的,所以除非绝对必要,否则可能无法进行重大改变。

事先感谢所有人!

阿曼

2 个答案:

答案 0 :(得分:2)

对于那些仍在寻找解决方案的人来说,遵循两个选项可以解决与OP提到的完全相同的问题。

  • 在目标模块中也包含(有问题的)库依赖项,即在我的情况下我将protobuf-lite包含为我的库模块的依赖项,但是当lib导入时出现noclassdefFound错误在应用模块中为.aar。作为一种解决方法,我将protobuf-lite依赖项添加到我的应用程序模块中,它就像魅力一样。

  • 第二个选项对我有用,而不是添加gradle依赖`compile'c​​om.google.protobuf:protobuf-lite:3.0.1',我从maven下载了protobuf-jar并手动添加到了我的库模块的库,问题解决了。

不知道gradle插件有什么问题,但希望它可以帮助其他人寻找同样的问题。

答案 1 :(得分:1)

NoClassDefFound错误实际上发生在我在问题中提到的这个类所使用的向后兼容库(" A类")。没有给出详细信息,除了A类无法找到,后来发现另一个类有类似的问题,但是指向那个具有相同异常的compat lib,我注意到A类也在调用它的方法和实现其回调。通过提升min version(使用本机API),我可以克服这个问题。确实存在这样的问题:在.aar左右看起来包含了back-comp库。我是否应该更好地理解这个问题,我会更新这个"回答。"