2016-06-03 17 views
12

Ho un file .jar con un'interfaccia Java chiamato MyService, che ha un metodo:Xamarin .jar vincolante - 'Bitmap non poteva essere trovato'

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

Vorrei utilizzare questo file .jar in C# a il mio progetto Android Xamarin in Visual Studio 2015. Ho fatto i seguenti passaggi:

  1. Ho creato un nuovo progetto di rilegatura della libreria.
  2. Ho inserito il file .jar nella directory Jars del nuovo progetto con la proprietà BuildAction impostata su InputJar.
  3. Il progetto è stato realizzato con successo.
  4. Ho aggiunto un riferimento al progetto di rilegatura della biblioteca nel mio progetto principale.

Purtroppo, non posso costruire il mio progetto principale più, perché non v'è un errore nel codice C generato automaticamente #:

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

con il messaggio "The type or namespace name 'Bitmap' could not be found (are you missing a using directive or an assembly reference?)".

C'è anche una classe astratta generata automaticamente IMyServiceStub, che non riconosce anche Bitmap. Inoltre, non conosce un po 'di auto-generata BitmapStub sia:

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; 
       } 
     ... 
    } 

} 

Ho provato ad aggiungere using Bitmap = Android.Graphics.Bitmap al file generato automaticamente, ma non aiuta, perché BitmapStub rimane sconosciuto e le mie modifiche vengono sovrascritti durante il prossima build.

C'è qualcosa che posso fare per risolvere questo problema? O è un bug noto in Xamarin (utilizzo la versione 4.0)?

+0

Puoi condividere il .jar in modo che possa provare ad aiutarti? – jzeferino

+0

@jzeferino Non posso, sfortunatamente, spezzerei NDA ... – vojta

risposta

1

Non ho giocato in Xamarin per un po ', tuttavia lo spazio dei nomi di Android.Graphics.Bitmap appartiene al linguaggio Java, non C#. Quindi il codice C# generato non saprebbe nulla di quel namespace.

Pertanto, vorrei provare ad aggiungere using System.Drawing; invece di using Bitmap = Android.Graphics.Bitmap

Si può anche essere necessario aggiungere manualmente che DLL come un riferimento al progetto C# se il compilatore non riconosce il System.Drawing namespace.

Fammi sapere come funziona.

+0

Questa non è una soluzione, sfortunatamente. Anche se aggiungo 'using System.Drawing;', viene sovrascritto dalla build successiva. Il file è generato automaticamente. – vojta

+0

System.Drawing è specifico solo per le piattaforme Windows !!! –

+0

Sì, lo so ...ma poiché l'errore viene generato al momento della compilazione, cerca il tipo di Windows, non il tipo Java (a meno che Visual Studio non stia compilando il sorgente Java e non sia solo generandolo, che sarebbe una novità per me). – HBomb

2

Il collegamento Jar non funziona con i progetti di libreria Android, è necessario includere il file .aar. I file Jar non fanno riferimento alle librerie specifiche di Android in jar, ma il file .aar fa riferimento correttamente a tutte le librerie relative ad Android richieste.

+1

Grazie, è interessante ... Potresti aggiungere qualche dettaglio? Ho questo file jar di terze parti che funziona alla grande nella mia app Android scritta in Java e integrata in Android Studio. Tuttavia, non ho file di aar. Come posso averlo? Quali passi devo seguire per poter utilizzare la funzionalità del file jar dalla mia app C# Xamarin per Android in Visual Studio? – vojta

+0

Troverete il file aar nella cartella 'build \ outputs \ aar'. Per favore segui questo, https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-an-aar/ –

+0

Il manuale collegato spiega come associare un file .aar. Tuttavia, non ho alcun file .aar e non ho il codice sorgente per il file jar, quindi non posso costruirlo da solo. Il mio file jar è una libreria di terze parti. Posso convertire il barattolo in un aar in qualche modo? – vojta

Problemi correlati