我有一个非常奇怪的问题,我怀疑与多索引相关(但不确定)。
我有一个app模块和一个库模块。该库正在app start上执行一些代码,它通过主应用程序类的接口获取库中定义的类名。
现在奇怪的部分开始了。 该应用程序根据以下说明进行了多索引 - 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文件之间的类分布并看到了两件事:
此外,当我将库中的调用替换为具有实际类名的应用程序(图中的getClassName())时,所有构建类型都能正常工作!
作为了解最新情况的最后一次尝试我已经比较了2个apks,原来的那个没有调用应用程序(用实际的类名替换),并且我能看到的唯一区别是拨打电话的图书馆代码。就dex文件之间的类分布而言,绝对没有区别!
有谁知道这里的问题是什么?感谢。
答案 0 :(得分:0)
最终是com / newrelic / agent / android / api / v2 / TraceFieldInterface.class,我必须确保它在主dex文件中。
如果有人使用newrelic,您可能需要注意这一点。