【问题标题】:Android app crashes instantly with "Didn't find class {hash}.MainApplication" [duplicate]Android 应用程序因“找不到类 {hash}.MainApplication”而立即崩溃 [重复]
【发布时间】:2017-12-09 19:27:05
【问题描述】:

我已将 Windows 升级到 10.0.16299(最新),并将我的 Visual Studio 升级到 15.5.1(最新)。从那时起,当我构建并运行我在 Xamarin 中构建的 Android 应用程序时,应用程序立即崩溃。

很遗憾,[AppName] 已停止。

无论我想在模拟器还是连接的真实设备上运行应用程序,都会出现此问题。输出窗口显示此错误消息:

FATAL EXCEPTION: main
Process: [AppName], PID: 16778
java.lang.RuntimeException: Unable to instantiate application md53c5f17a815ca1a4a699c7162c91a7059.MainApplication: java.lang.ClassNotFoundException: Didn't find class "md53c5f17a815ca1a4a699c7162c91a7059.MainApplication" on path: DexPathList[[zip file "/data/app/nz.HUMANiT.Frank-1/base.apk"],nativeLibraryDirectories=[/data/app/nz.HUMANiT.Frank-1/lib/arm64, /data/app/[AppName]-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]
    at android.app.LoadedApk.makeApplication(LoadedApk.java:587)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4932)
    at android.app.ActivityThread.-wrap1(ActivityThread.java)
    ...
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

Caused by: java.lang.ClassNotFoundException: Didn't find class "md53c5f17a815ca1a4a699c7162c91a7059.MainApplication" on path: DexPathList[[zip file "/data/app/[AppName]-1/base.apk"],nativeLibraryDirectories=[/data/app/[AppName]-1/lib/arm64, /data/app/[AppName]-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
    ...

Suppressed: java.lang.ClassNotFoundException: md53c5f17a815ca1a4a699c7162c91a7059.MainApplication
    at java.lang.Class.classForName(Native Method)
    at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
    ...

Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

我发现了过去 Xamarin 中存在错误的提示;但是,解释的解决方案和修复不起作用。启用或禁用 multidex也不能解决问题。

这是 Xamarin 中的新错误吗?任何想法?有什么建议吗?

【问题讨论】:

  • 你试过在Visual Studio Installer中使用Repair吗?
  • 是的。我还卸载并安装了 Xamarin 组件。卸载并安装了所有 Visual Studio。卸载 Visual Studio,删除我手动找到的所有剩余部分并重新安装。没有任何帮助。
  • 您提到您在项目中使用了multidex,I think this maybe will help you
  • @JoeLv,很好的发现。谢谢!但是,无论是否使用 multidex,都会出现此问题。我只尝试启用 multidex,因为其他帖子建议这样做,因为它解决了他们的问题。另外,我在另一台机器上尝试了完全相同的解决方案/代码库,同样设置,但是 VS 15.5.0 并且它在那里工作。
  • 清理您的项目解决方案,删除 bin 和 obj 文件,重新启动您的 Visual Studio 并重试,它确实对我有用。

标签: xamarin xamarin.android classnotfoundexception


【解决方案1】:

遇到同样的问题。

看起来像一个 Xamarin 错误:生成的 AndroidManifest 中的 android 包名称错误(与生成的 java 类中的不同)。

解决方法:使用“名称”属性为您的 android 活动(和应用程序类,如果有)指定一个包名称。

如果您的活动是:

[Activity(Label = "App1", Icon = "@drawable/icon", Theme = "@style/MainTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, LaunchMode = LaunchMode.SingleTask)]
public class MainActivity : FormsAppCompatActivity {
...
}

改成:

[Activity(Name = "apackagename.MainActivity", Label = "App1", Icon = "@drawable/icon", Theme = "@style/MainTheme", ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, LaunchMode = LaunchMode.SingleTask)]
public class MainActivity : FormsAppCompatActivity {
...
}

这应该可以解决问题。

【讨论】:

  • 我试过了,但没有解决我的问题。事实证明,升级到 Visual Studio 15.5.2 有助于解决这个问题。
  • 这对我也不起作用。此外,已经在 15.5.2(Visual Studio 的最新版本)上。
  • 启用 Multi-Dex 解决了这个问题。对我来说很容易重现,只需取消选中它,清理并重建:问题又回来了。启用 Multi-Dex,清理重建,问题消失。我不可能超过 64k 限制。不理解这种行为 - 也许是错误?
  • @maplemale:请参阅我的问题:multi-dex 选项是针对特定错误消息问题的常见解决方案,就像您拥有的那样,但不是我拥有的那个,它是我发布问题的原因。我没有有一个 Java 变量计数器溢出,而 multi-dex 选项可以规避它。
  • @QualityCatalyst 这可能仍然是同一个问题,您是否尝试检查 obj\Debug\android\bin\classes 目录?它里面有classes.zip文件吗?如果是这样,请将其向上移动一个(因此它与 classes 文件夹位于同一目录中,即 bin 文件夹中)。不要将它复制/粘贴到一个目录中,实际移动它。
猜你喜欢
  • 2018-04-08
  • 2014-08-22
  • 2016-01-10
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2013-07-07
相关资源
最近更新 更多