Xamarin Android & AIDL: Java.Lang.IllegalStateException: 'Bundle 的幻数错误

Xamarin Android & AIDL: Java.Lang.IllegalStateException: 'Bad magic number for Bundle

我正在使用 Xamarin Android 连接 Android 服务。在我为 .aidl 文件和 运行 项目自动生成存根后,我遇到了以下错误。

"Java.Lang.IllegalStateException: 'Bad magic number for Bundle"

我正在使用一个包含两个浮点值的 Parceable class。

public class TLGeoPoint : Java.Lang.Object, IParcelable
{
    public float lat { get; set; }
    public float lng { get; set; }

    public TLGeoPoint()
    {

    }

    public TLGeoPoint(Parcel parcel)
    {
        ReadFromParcel(parcel);
    }

    [ExportField("CREATOR")] // Need a reference to Mono.Android.Export
    public static TLGeoPointCreator InitializeCreator()
    {
        return new TLGeoPointCreator();
    }

    public int DescribeContents()
    {
        return 0;
    }

    public void WriteToParcel(Parcel dest, [GeneratedEnum] ParcelableWriteFlags flags)
    {
        dest.WriteFloat(lat);
        dest.WriteFloat(lng);
    }

    public void ReadFromParcel(Parcel parcel)
    {
        lat = parcel.ReadFloat();
        lng = parcel.ReadFloat();
    }
}

public class TLGeoPointCreator : Java.Lang.Object, IParcelableCreator
{
    public Java.Lang.Object CreateFromParcel(Parcel source)
    {
        TLGeoPoint objGeo = new TLGeoPoint();
        objGeo.lat = source.ReadFloat();
        objGeo.lng = source.ReadFloat();
        return objGeo;
    }

    public Java.Lang.Object[] NewArray(int size)
    {
        return new Java.Lang.Object[size];
    }
}

我想知道 Xamarin AIDL 代码生成中是否存在导致 Bag Magic Number 异常的错误,或者我缺少添加的内容。

请注意,该服务接受回调函数并通过该回调发送数据。我在调用回调之前收到此错误。

Xamarin AIDL 生成器中似乎存在错误。

同时,在 Xamarin 端解决该错误之前,您有多种选择。

  1. 移除生成的AIDL接口,移除你的*.aidl文件,手工编写IPC编组代码。哎呀
  2. 按照 this official tutorial 中的说明使用 Messenger + 捆绑包。每种方法都会有一些样板文件,但这种方法总体上是可用的。
  3. 或者将 IPC 代码移动到单独的 Java 库模块中。如果这样做,您应该能够使用官方 aidl 工具或通过其他方式(例如使用我自己为此目的编写的 library )生成 IPC 代理实现。