android - 无法实例化应用程序:在路径上找不到类:DexPathList
问题描述
我们的一个 Unity 应用程序最近在 Android 上遇到了问题,Application 类不在主 dex 中。结果是应用程序构建,但在启动时崩溃。
这是一个现有的 Android 应用程序,启用了 multidex,并且该应用程序扩展了 MultiDexApplication。我按照说明在主 DEX 文件中声明了所需的类,但抛出了相同的异常。
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
我努力了
- 添加 multiDexKeepFile.txt (
multiDexKeepFile file('multiDexKeepFile.txt')
) - 添加 multiDexKeepProguard.pro (
multiDexKeepProguard file('multiDexKeepProguard.pro')
)
- 注意:无论是启用还是禁用 proguard,都会出现此问题。
当我将 multiDexKeep 文件添加到 gradle 文件所在的 Assets/Plugins/Android/ 时,即使我导出项目,Unity 似乎也会忽略它们。所以我也试过:
- 使用 IPostprocessBuildWithReport 手动添加 multiDexKeep 文件。
- 使用 IPreprocessBuildWithReport 手动添加 multiDexKeep 文件。
- 制作一个包含 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 似乎可以识别它们。
我还发现了对我们不再在主 Activity 内部使用的 sdk 的引用。去掉代码和 sdk 似乎也安抚了 dex 大神们。
推荐阅读
- python - 如何在 wordpress 网站的后台运行 python 脚本
- php - 获取临时凭据时收到带有消息“{“errors”:[{“code”:32,“message”:“无法验证您。”}]}“的HTTP状态代码[401]
- algorithm - 查找单词字谜数量的算法?
- android - Ionic 与 SwiperJS 的幻灯片在 Android 上是生涩的。在 iOS 和网络上都很好
- laravel - Laravel Fortify :: 通过 Livewire 调用 `updatePassword()` 函数
- java - 为什么错误 javax.jms.InvalidDestinationException:不允许创建目的地?使用 Spring Boot 应用程序向 MQ 发送消息的问题
- r - 使用 R 行上的逻辑运算符向列添加值
- swift - 为什么我会收到快速错误“参数传递给不带参数的调用”
- elasticsearch - 具有范围和 match_phrase 的聚合
- javascript - 使用 react-spring 为一组自行车字幕添加简单的过渡