Class 由于 md5 错误,未发现异常

Class not found exception due to wrong md5

我正在构建 Xamarin android 应用程序。

xamarin 更新后出现构建错误。我不知道这是否相关,但之前有效的现在抛出异常:ClassNotFoundException。 class 存在并且是一个正确的 activity。那个区域完全没有变化。

我在这方面看到了很多 SO 线程,但它们都建议清理解决方案、删除构建文件夹等。不幸的是,这对我没有帮助。

我意识到在异常消息中 W/monodroid( 4201): JNIEnv.FindClass(Type) caught unexpected exception: Java.Lang.ClassNotFoundException: md56629fa8edd4a41a77563f74c5f9a5f792.MainActivity md5 部分与 MainActivity.class 所在的文件夹 (md56b5cfc81a7b5c4227a0c9a4dcb7dab856) 不同。当我删除该文件夹时,会在构建过程中生成一个新文件夹。它的md5又不一样了。但是异常又出现了,要求和之前一样的旧md5

我的问题:

1.) 我该怎么做才能让 JNIEnv 寻找正确的 md5?

2.) 这些 md5 是如何生成的以及为什么

谢谢。

Xamarin 为具有 Android 可调用包装器 (ACW) 的所有类型生成 MD5 和,除非您明确为其指定名称。我想这样做是为了避免与其他类型发生冲突,这些类型可能存在于相同的包名称中。这些是在构建时生成的。

为了在继承自 Java.Lang.Object 的类型上设置您自己的名称,这些类型包括 ActivityAdapterView 等等。您只需将 Register 属性添加到 class:

[Register("my.cool.package.MyTypeName")]
public class MyTypeName : SomeJavaType
{

}

对于 class,例如 Activity,您可以选择使用 Activity 属性中的 Name 属性:

[Activity(Label = "MyActivity", Name = "my.cool.package.MyActivity")]
public class MyActivity : Activity
{

}