Xamarin .jar绑定 - '无法找到位图'

时间:2016-06-03 14:18:01

标签: java c# android visual-studio xamarin

我有一个名为.jar的Java接口MyService文件,其中有一个方法:

boolean printBitmapObject(android.graphics.Bitmap bitmap, byte[] result);

我想在Visual Studio 2015中的Android Xamarin项目中使用C#中的这个.jar文件。我做了以下步骤:

  1. 我创建了一个新的图书馆绑定项目。
  2. 我将.jar文件放入新项目的Jars目录中,BuildAction属性设置为InputJar
  3. 该项目成功建成。
  4. 我将库绑定项目的引用添加到我的主项目中。
  5. 不幸的是,我无法再构建我的主项目,因为自动生成的C#代码中存在错误:

        public interface IMyService : global::Android.OS.IInterface
        {
           bool PrintBitmapObject (Bitmap bmp, byte[] result); //"Bitmap" is red underlined
        }
    

    包含消息"The type or namespace name 'Bitmap' could not be found (are you missing a using directive or an assembly reference?)"

    还有一个自动生成的抽象类IMyServiceStub,它也不会识别Bitmap。此外,它也不知道一些自动生成的BitmapStub

    public abstract class IMyServiceStub : global::Android.OS.Binder, global::Android.OS.IInterface, IMyService
    {
        ...
        protected override bool OnTransact (int code, global::Android.OS.Parcel data, global::Android.OS.Parcel reply, int flags)
        {
            ...
            case TransactionPrintBitmapObject: {
                    data.EnforceInterface (descriptor);
                    Bitmap arg0 = default (Bitmap); //Bitmap red underlined
                    arg0 = BitmapStub.AsInterface (data.ReadStrongBinder ()); //BitmapStub red underlined
                    byte [] arg1 = default (byte []);
                    var result = this.PrintBitmapObject (arg0, arg1);
                    reply.WriteNoException ();
                    reply.WriteInt (result ? 1 : 0);
                    data.WriteByteArray (arg1);
                    return true;
                    }
            ...
        }
    
    }
    

    我尝试将using Bitmap = Android.Graphics.Bitmap添加到自动生成的文件中,但它没有帮助,因为BitmapStub仍然未知,我的更改会在下一次构建时被覆盖。

    我能解决这个问题吗?或者它是Xamarin中的一个已知错误(我使用的是4.0版本)?

2 个答案:

答案 0 :(得分:2)

Jar绑定不适用于Android库项目,您需要包含.aar文件。 Jar文件不引用jar中的特定于android的库,但是.aar文件正确引用了所有必需的android相关库。

答案 1 :(得分:0)

我暂时没有在Xamarin中玩过,但Android.Graphics.Bitmap命名空间属于Java语言,而不是c#。因此,生成的c#代码对该命名空间一无所知。

因此,我会尝试添加using System.Drawing;而不是using Bitmap = Android.Graphics.Bitmap

如果编译器无法识别 System.Drawing 命名空间,您可能还必须手动添加该DLL作为对C#项目的引用。

让我知道这是怎么回事。