在multidex' ed apk中的NoClassDefFound

时间:2016-11-28 10:32:18

标签: android dex

我有一个非常奇怪的问题,我怀疑与多索引相关(但不确定)。

我有一个app模块和一个库模块。该库正在app start上执行一些代码,它通过主应用程序类的接口获取库中定义的类名。

enter image description here

现在奇怪的部分开始了。 该应用程序根据以下说明进行了多索引 - Configure Apps with Over 64K Methods - 我有2种构建类型 - 调试和发布。在发布版本中使用proguard来混淆和缩小代码。在调试版本中我不是。

在使用android +21的设备上运行应用程序时,在两种构建类型中一切正常。

在具有pre lollipop版本的设备上运行应用程序时,一切都在发布版本类型中正常工作,但在调试构建类型中我得到NoClassDefFoundError因为应用程序试图返回到库的类。

按照Declare classes required in the primary DEX file中的建议,我在android studio中使用了APK Analyzer来检查dex文件之间的类分布并看到了两件事:

  1. 在发布版本类型中只有一个dex文件。
  2. 在调试构建类型中有2个dex文件,但有问题的类(及其父类)在主要dex文件中定义。
  3. 此外,当我将库中的调用替换为具有实际类名的应用程序(图中的getClassName())时,所有构建类型都能正常工作!

    作为了解最新情况的最后一次尝试我已经比较了2个apks,原来的那个没有调用应用程序(用实际的类名替换),并且我能看到的唯一区别是拨打电话的图书馆代码。就dex文件之间的类分布而言,绝对没有区别!

    有谁知道这里的问题是什么?感谢。

1 个答案:

答案 0 :(得分:0)

最终是com / newrelic / agent / android / api / v2 / TraceFieldInterface.class,我必须确保它在主dex文件中。

如果有人使用newrelic,您可能需要注意这一点。