我有一个名为.jar
的Java接口MyService
文件,其中有一个方法:
boolean printBitmapObject(android.graphics.Bitmap bitmap, byte[] result);
我想在Visual Studio 2015中的Android Xamarin项目中使用C#中的这个.jar
文件。我做了以下步骤:
.jar
文件放入新项目的Jars
目录中,BuildAction
属性设置为InputJar
。不幸的是,我无法再构建我的主项目,因为自动生成的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版本)?
答案 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#项目的引用。
让我知道这是怎么回事。