【问题标题】:Class not found exception due to wrong md5由于错误的 md5,类未找到异常
【发布时间】:2017-08-06 20:36:08
【问题描述】:

我正在构建一个 Xamarin 安卓应用。

xamarin 更新后出现构建错误。我无法判断这是否相关,但之前有效的方法现在抛出异常:ClassNotFoundException。该类存在并且是适当的活动。那个区域完全没有变化。

我在这方面看到了很多 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 是如何生成的以及为什么生成的

谢谢。

【问题讨论】:

    标签: android .net xamarin build classnotfoundexception


    【解决方案1】:

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

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

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

    对于Activity 等类,您也可以在Activity 属性中使用Name 属性:

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

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2014-10-02
      • 2023-03-04
      相关资源
      最近更新 更多