Подтвердить что ты не робот

Xamarin.jar binding - "Bitmap не найден"

У меня есть файл .jar с интерфейсом Java под названием MyService, который имеет метод:

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

Я хотел бы использовать этот файл .jar в С# в своем проекте Android Xamarin в Visual Studio 2015. Я сделал следующие шаги:

  • Я создал новый проект привязки библиотеки.
  • Я поместил файл .jar в каталог Jars нового проекта с свойством BuildAction, установленным на InputJar.
  • Проект был успешно выполнен.
  • Я добавил ссылку на проект, связанный с библиотекой, в мой основной проект.

К сожалению, я больше не могу строить свой основной проект, потому что в автогенерированном С# -коде есть ошибка:

    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)?

4b9b3361

Ответ 1

Связывание Jar не будет работать с проектами библиотеки Android, вам нужно включить .aar файл. Файлы Jar не ссылаются на специфические библиотеки Android в jar, но .aar файл правильно ссылается на все необходимые связанные с Android библиотеки.

Ответ 2

Я не играл в Xamarin через некоторое время, однако пространство имен Android.Graphics.Bitmap принадлежит языку Java, а не С#. Таким образом, сгенерированный код С# ничего не знает об этом пространстве имен.

Поэтому я бы попытался добавить using System.Drawing; вместо using Bitmap = Android.Graphics.Bitmap

Вам также может потребоваться вручную добавить эту DLL в качестве ссылки на проект С#, если компилятор не распознает пространство имен System.Drawing.

Сообщите мне, как это работает.