多索引 apk 中的 NoClassDefFounderror
NoClassDefFound in a multidex'ed apk
我有一个非常奇怪的问题,我怀疑与多索引有关(但不确定)。
我有一个应用程序模块和一个库模块。库在应用程序启动时执行一些代码,通过主应用程序 class 上的接口,获取库中定义的 class 名称。
现在奇怪的部分开始了。
该应用程序根据以下说明进行多索引处理 - Configure Apps with Over 64K Methods - 我有 2 种构建类型 - 调试和发布。在发布版本中,我使用混淆器来混淆和缩小代码。在调试版本中我没有。
当 运行 应用程序在 android +21 的设备上时,在两种构建类型中一切正常。
当 运行 应用程序在具有棒棒糖之前版本的设备上时,在发布构建类型中一切正常,但在调试构建类型中我得到 NoClassDefFoundError
因为 class 应用程序正在尝试到 return 到图书馆。
按照 Declare classes required in the primary DEX file 中的建议,我在 android studio 中使用了 APK 分析器来检查 classes 在 dex 文件之间的分布,并看到了两件事:
- 在release build type中只有一个dex文件。
- 在调试构建类型中有 2 个 dex 文件,但有问题的 class(及其父文件)在主 dex 文件中定义。
此外,当我用实际的 class 名称替换从库到应用程序(图中的 getClassName())的调用时,在所有构建类型中一切正常!
作为最后一次了解这里发生了什么的尝试,我比较了 2 个 apk,原始的和没有调用应用程序的(替换为实际的 class 名称),以及唯一的我能看到的区别是进行调用的库代码。在 dex 文件之间的 classes 分布方面绝对没有区别!
有人知道这里的问题是什么吗?谢谢
最终 com/newrelic/agent/android/api/v2/TraceFieldInterface。class 我必须确保它在主 dex 文件中。
如果有人在使用 newrelic 你可能要注意这一点。
我有一个非常奇怪的问题,我怀疑与多索引有关(但不确定)。
我有一个应用程序模块和一个库模块。库在应用程序启动时执行一些代码,通过主应用程序 class 上的接口,获取库中定义的 class 名称。
现在奇怪的部分开始了。 该应用程序根据以下说明进行多索引处理 - Configure Apps with Over 64K Methods - 我有 2 种构建类型 - 调试和发布。在发布版本中,我使用混淆器来混淆和缩小代码。在调试版本中我没有。
当 运行 应用程序在 android +21 的设备上时,在两种构建类型中一切正常。
当 运行 应用程序在具有棒棒糖之前版本的设备上时,在发布构建类型中一切正常,但在调试构建类型中我得到 NoClassDefFoundError
因为 class 应用程序正在尝试到 return 到图书馆。
按照 Declare classes required in the primary DEX file 中的建议,我在 android studio 中使用了 APK 分析器来检查 classes 在 dex 文件之间的分布,并看到了两件事:
- 在release build type中只有一个dex文件。
- 在调试构建类型中有 2 个 dex 文件,但有问题的 class(及其父文件)在主 dex 文件中定义。
此外,当我用实际的 class 名称替换从库到应用程序(图中的 getClassName())的调用时,在所有构建类型中一切正常!
作为最后一次了解这里发生了什么的尝试,我比较了 2 个 apk,原始的和没有调用应用程序的(替换为实际的 class 名称),以及唯一的我能看到的区别是进行调用的库代码。在 dex 文件之间的 classes 分布方面绝对没有区别!
有人知道这里的问题是什么吗?谢谢
最终 com/newrelic/agent/android/api/v2/TraceFieldInterface。class 我必须确保它在主 dex 文件中。
如果有人在使用 newrelic 你可能要注意这一点。