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

问题描述 投票:0回答:2

我们的一个 Unity 应用程序最近在 Android 上遇到了一个问题,应用程序类不在主 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

我已经尝试过了

  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
android unity-game-engine android-multidex
2个回答
0
投票

我能够解决这个问题。看来 Unity 可以识别位于 .androidlib 中的文件。

我还发现了对我们不再在主 Activity 内部使用的 sdk 的引用。删除代码和 sdk 似乎也安抚了 dex 诸神。


0
投票

我遇到了同样的问题,这就是我解决它的方法:

  1. 转到包级别清单文件
  2. 在文件的最开头,如果你有类似下面的内容,

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.android.kotlincoroutines">

您需要删除这一行 --> package="com.example.android.kotlincoroutines"

  1. 完成后,也更新这两行以完成路径。

之前:

<application
    android:name=".KotlinCoroutinesApp">
    <activity android:name=".main.MainActivity"
        android:exported="true">
        ...
    </activity>

之后

<application
    android:name="com.example.android.kotlincoroutines.KotlinCoroutinesApp">`
    <activity android:name="com.example.android.kotlincoroutines.main.MainActivity"
        android:exported="true">
        ...
    </activity>
  1. 同步和重建
© www.soinside.com 2019 - 2024. All rights reserved.