我们的一个 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
我已经尝试过了
multiDexKeepFile file('multiDexKeepFile.txt')
)multiDexKeepProguard file('multiDexKeepProguard.pro')
)当我将 multiDexKeep 文件添加到 gradle 文件所在的 Assets/Plugins/Android/ 时,Unity 似乎会忽略它们,即使我导出项目也是如此。所以我也尝试过:
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
我能够解决这个问题。看来 Unity 可以识别位于 .androidlib 中的文件。
我还发现了对我们不再在主 Activity 内部使用的 sdk 的引用。删除代码和 sdk 似乎也安抚了 dex 诸神。
我遇到了同样的问题,这就是我解决它的方法:
<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"
之前:
<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>