微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法实例化应用程序:在路径上找不到类:DexPathList

如何解决无法实例化应用程序:在路径上找不到类:DexPathList

我们的一个 Unity 应用程序最近在 Android 上遇到了一个问题,即 Application 类不在主 dex 中。结果是应用程序构建,但在启动时崩溃。

这是一个现有的 Android 应用程序,启用了 multidex,并且该应用程序扩展了 MultiDexApplication。我按照 Declare classes required in the primary DEX file 的说明进行操作,但抛出了相同的异常。

java.lang.RuntimeException: Unable to instantiate application com.example.Application: java.lang.classNotFoundException: Didn't find class "com.example.Application" on path: DexPathList

同样,在主 dex 中也找不到 MultiDexApplication 类,如堆栈跟踪所示:

Caused by: java.lang.classNotFoundException: Didn't find class "androidx.multidex.MultiDexApplication" on path: DexPathList

我试过了

  1. 添加 multiDexKeepFile.txt (multiDexKeepFile file('multiDexKeepFile.txt'))
  2. 添加 multiDexKeepProguard.pro (multiDexKeepProguard file('multiDexKeepProguard.pro'))
  • 注意:无论 proguard 是启用还是禁用,都会出现此问题。

当我将 multiDexKeep 文件添加到 gradle 文件所在的 Assets/Plugins/Android/ 时,即使我导出项目,Unity 似乎也忽略了它们。所以我也试过了:

  1. 使用 IPostprocessBuildWithReport 手动添加 multiDexKeep 文件
  2. 使用 IPreprocessBuildWithReport 手动添加 multiDexKeep 文件
  3. 制作一个包含 multiDexKeep 文件的 Android 库。

Unity 似乎无法自行获取 multiDexKeep 文件,但可以通过任一进程导出它们。然而,即使我导出项目并在Android Studio中构建项目,这些类仍然没有出现在主dex中。

有人解决过这个问题吗?

multiDexKeepFile.txt:

androidx/multidex/MultiDexApplication.class
com/example/Application.class

multiDexKeepProguard.pro:

-keep class androidx.multidex.MultiDexApplication
-keep class com.example.Application

解决方法

我能够解决这个问题。如果文件位于 .androidlib 内,Unity 似乎可以识别这些文件。

我还发现了对我们不再在主活动中使用的 sdk 的引用。去掉代码和sdk似乎也安抚了dex大神。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。