尝试构建现有 Xamarin 项目时出现 ClassNotFoundException
ClassNotFoundException when trying to build an existing Xamarin project
我收到了一个现有的 Xamarin 项目,我需要在发布它之前对其进行处理。
我试过在 2 台不同的设备上安装它:
- Nexus 5,运行Android6.0(API23)
- 模拟器 Android 4.4 (API 19) - 通过 Visual Studio 模拟器模拟 Android
但是,每次我这样做时,它都会在启动时崩溃并显示 java.lang.classNotFoundException: Didn't find class "md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen"
(下面是完整的堆栈跟踪)
(ConnectScreen 是我的 MainLauncher)
我尝试过的事情:
- 正在删除 bin/obj 文件夹并重建
- 清理项目并重建
- 正在终止 MSBuild 进程,清理并重建
经过一些研究,我找到了 Classy-Shark,这让我可以在 .apk
文件中发现 DEX 列表。
由此看来,ConnectScreen 似乎没有编译在包 md515fc9a7f42ec11c09d24b1c1a9770737
(应用正在寻找)中,而是编译在 md5bc065f6c935f653292ddf7352d29f8ad
中。这对我来说似乎不对?
(这两个包在我每次构建项目时都会改变)
我尝试构建一个新项目(跨平台应用程序、本机、Master Details、.NET Standard)并且这个项目在我的 Nexus 5 上运行良好,所以我不认为这是因为我的 phone 或 Visual Studio 版本?
我已经尝试更改 MultiDex 设置以及 TargetFramework,但我仍然遇到同样的问题。
这是完整的堆栈跟踪:
Unhandled Exception:
Java.Lang.RuntimeException: Unable to instantiate activity ComponentInfo{MyApp.MyApp/md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen}: java.lang.ClassNotFoundException: Didn't find class "md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen" on path: DexPathList[[zip file "/data/app/MyApp.MyApp-1.apk"],nativeLibraryDirectories=[/data/app-lib/MyApp.MyApp-1, /system/lib]]
12-22 10:39:51.537 E/AndroidRuntime( 1255): FATAL EXCEPTION: main
12-22 10:39:51.537 E/AndroidRuntime( 1255): Process: MyApp.MyApp, PID: 1255
12-22 10:39:51.537 E/AndroidRuntime( 1255): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{MyApp.MyApp/md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen}: java.lang.ClassNotFoundException: Didn't find class "md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen" on path: DexPathList[[zip file "/data/app/MyApp.MyApp-1.apk"],nativeLibraryDirectories=[/data/app-lib/MyApp.MyApp-1, /system/lib]]
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.access0(ActivityThread.java:135)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.os.Handler.dispatchMessage(Handler.java:102)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.os.Looper.loop(Looper.java:136)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.main(ActivityThread.java:5001)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at java.lang.reflect.Method.invokeNative(Native Method)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at java.lang.reflect.Method.invoke(Method.java:515)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at dalvik.system.NativeStart.main(Native Method)
12-22 10:39:51.537 E/AndroidRuntime( 1255): Caused by: java.lang.ClassNotFoundException: Didn't find class "md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen" on path: DexPathList[[zip file "/data/app/MyApp.MyApp-1.apk"],nativeLibraryDirectories=[/data/app-lib/MyApp.MyApp-1, /system/lib]]
12-22 10:39:51.537 E/AndroidRuntime( 1255): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
12-22 10:39:51.537 E/AndroidRuntime( 1255): ... 11 more
12-22 10:39:53.137 I/Process ( 1255): Sending signal. PID: 1255 SIG: 9
原来这似乎是最新版本 Visual Studio 2017 (15.5) 的一个错误。
将 Visual Studio 降级到 15.0 后,似乎工作正常。
这只是一个临时解决方案,但我希望它可以帮助其他人。
我收到了一个现有的 Xamarin 项目,我需要在发布它之前对其进行处理。
我试过在 2 台不同的设备上安装它:
- Nexus 5,运行Android6.0(API23)
- 模拟器 Android 4.4 (API 19) - 通过 Visual Studio 模拟器模拟 Android
但是,每次我这样做时,它都会在启动时崩溃并显示 java.lang.classNotFoundException: Didn't find class "md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen"
(下面是完整的堆栈跟踪)
(ConnectScreen 是我的 MainLauncher)
我尝试过的事情:
- 正在删除 bin/obj 文件夹并重建
- 清理项目并重建
- 正在终止 MSBuild 进程,清理并重建
经过一些研究,我找到了 Classy-Shark,这让我可以在 .apk
文件中发现 DEX 列表。
由此看来,ConnectScreen 似乎没有编译在包 md515fc9a7f42ec11c09d24b1c1a9770737
(应用正在寻找)中,而是编译在 md5bc065f6c935f653292ddf7352d29f8ad
中。这对我来说似乎不对?
(这两个包在我每次构建项目时都会改变)
我尝试构建一个新项目(跨平台应用程序、本机、Master Details、.NET Standard)并且这个项目在我的 Nexus 5 上运行良好,所以我不认为这是因为我的 phone 或 Visual Studio 版本?
我已经尝试更改 MultiDex 设置以及 TargetFramework,但我仍然遇到同样的问题。
这是完整的堆栈跟踪:
Unhandled Exception:
Java.Lang.RuntimeException: Unable to instantiate activity ComponentInfo{MyApp.MyApp/md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen}: java.lang.ClassNotFoundException: Didn't find class "md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen" on path: DexPathList[[zip file "/data/app/MyApp.MyApp-1.apk"],nativeLibraryDirectories=[/data/app-lib/MyApp.MyApp-1, /system/lib]]
12-22 10:39:51.537 E/AndroidRuntime( 1255): FATAL EXCEPTION: main
12-22 10:39:51.537 E/AndroidRuntime( 1255): Process: MyApp.MyApp, PID: 1255
12-22 10:39:51.537 E/AndroidRuntime( 1255): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{MyApp.MyApp/md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen}: java.lang.ClassNotFoundException: Didn't find class "md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen" on path: DexPathList[[zip file "/data/app/MyApp.MyApp-1.apk"],nativeLibraryDirectories=[/data/app-lib/MyApp.MyApp-1, /system/lib]]
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.access0(ActivityThread.java:135)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.os.Handler.dispatchMessage(Handler.java:102)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.os.Looper.loop(Looper.java:136)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.main(ActivityThread.java:5001)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at java.lang.reflect.Method.invokeNative(Native Method)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at java.lang.reflect.Method.invoke(Method.java:515)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at dalvik.system.NativeStart.main(Native Method)
12-22 10:39:51.537 E/AndroidRuntime( 1255): Caused by: java.lang.ClassNotFoundException: Didn't find class "md515fc9a7f42ec11c09d24b1c1a9770737.ConnectScreen" on path: DexPathList[[zip file "/data/app/MyApp.MyApp-1.apk"],nativeLibraryDirectories=[/data/app-lib/MyApp.MyApp-1, /system/lib]]
12-22 10:39:51.537 E/AndroidRuntime( 1255): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
12-22 10:39:51.537 E/AndroidRuntime( 1255): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2101)
12-22 10:39:51.537 E/AndroidRuntime( 1255): ... 11 more
12-22 10:39:53.137 I/Process ( 1255): Sending signal. PID: 1255 SIG: 9
原来这似乎是最新版本 Visual Studio 2017 (15.5) 的一个错误。
将 Visual Studio 降级到 15.0 后,似乎工作正常。
这只是一个临时解决方案,但我希望它可以帮助其他人。