.jar Android-Bibliothek importieren in Xamarin-Projekt

9

Es gibt mehrere Möglichkeiten, wie Andorid-Code (Java-Code) in das Xamarin-Projekt integriert werden kann. Offizielle Wege sind in diesem Artikel aufgeführt.

Wir versuchen, einen Java Library Binding-Ansatz zu verwenden, der in dem Artikel beschrieben wird. Unsere Test-andoid-Bibliothek wird speziell für diese Frage auf Github veröffentlicht.

Wir haben es in den Android Developer Tools erstellt und es als Java Android Library festgelegt. Es ist in Eclipse in ein .jar-Format eingebaut, das auf der Xamarin-Site als ausreichend angesehen wird.

Wenn wir versuchen, .jar in unser Projekt in Visual Studio einzubinden, zeigt uns der Object Explorer den Namespace des Bindungsassemblies, aber im Code können wir nicht auf die Methoden und Klassen in zugreifen, obwohl auf die Assembly verwiesen wird der namespace, deklariert in unserem test java android lib ..

Auf der anderen Seite, wenn wir fast jedes .jar nehmen, das ist eine Android-Bibliothek im Internet (zum Beispiel dieses ), wir können es binden und auf seine Methoden ohne ein Problem zugreifen.

Bitte vergleichen Sie zwei .jar und wenn möglich, lassen Sie mich wissen, was falsch ist mit unserer Test-Android-Bibliothek auf github, die dazu führt, dass unser Namespace aus dem Code nicht verfügbar ist.

    
Maxim V. Pavlov 08.04.2014, 17:14
quelle

2 Antworten

3

Ich lese den gleichen Artikel einer Java-Bibliothek tat, ging durch die Anweisungen und hatte keine Build-Fehler. Als ich versuchte, die Klassen aus meiner JAR-Datei zu verwenden, erkannte Intellisense nichts. Dann lese ich den Folgeartikel auf API Metadata Reference . Das brachte mich auf den Gedanken, dass ich vielleicht versuchen sollte, die Datei Transforms / Metadata.xml zu bearbeiten. Nach der kurzen Bearbeitung, um das Paket umzubenennen, erlaubte Visual Studio (nach einem Kompilieren) einen Verweis auf eine Klasse aus der JAR-Datei. Ich habe dann versucht, eine Methode von der Klasse aufzurufen, und wieder einen weiteren Compilerfehler. Also ging ich zurück in die Datei Metadata.xml und fügte einen Eintrag hinzu, um die betreffende Methode umzubenennen. Ich habe meinen Code bearbeitet, um die umbenannte Methode aufzurufen, und Visual Studio wurde ordnungsgemäß kompiliert. Ich habe diesen Aufruf in einen Unit-Testfall integriert, und er hat bestanden!

Nach meiner Lektüre schien es nicht notwendig zu sein, die Datei Metadata.xml zu bearbeiten, aber zumindest nach meiner Erfahrung erschien es notwendig. Es verwendet XPATH für die Datei obj / Release / api.xml (wie in angegeben) API-Metadatenreferenz ). Aus diesem Artikel gab es Beispiele für das Umbenennen sowohl von Paket & amp; Methodennamen, daher war es nicht viel Arbeit für mich, sie in meine Metadata.xml-Datei einzufügen. Außerdem habe ich das OsmBindingDroidExample aus der Bindung einer Java-Bibliothek heruntergeladen Artikel und ausgecheckt ihre Metadata.xml-Datei als auch.

Hier ist auch meine XML als Referenz:

%Vor%

Also, jetzt in meinem .NET-Code könnte ich schreiben:

%Vor%

Hoffe, das hilft!

BEARBEITEN:

Ich habe mich mit dem Xamarin-Toolkit ein bisschen vertrauter gemacht und habe ein Update, um die Benutzung einfacher zu machen.

Um die Beteiligung von Code zu minimieren, der mit den jar-Methoden interagieren muss, können Sie mit Xamarin C # -Klassen im Ordner Additions erstellen. Also habe ich eine Wrapperklasse erstellt, die die Methoden in einer verwalteten C # -Klasse verfügbar macht, auf die andere Projekte zugreifen können. Da es C # ist, gibt es keine Beschwerden von Visual Studio.

Hier sehen Sie, wie eine Wrapper-Klasse aussehen würde, wenn Sie mit meinem früheren Beispiel fortfahren (offensichtlich würden Sie einen Namen auswählen, der für die betreffende Aufgabe aussagekräftiger ist):

%Vor%

Dann hätten Sie in Ihrem Projektcode volle Intelligenz, wenn Sie nur Ihre Wrapper-Klasse aufrufen:

%Vor%

Dies erleichtert die Arbeit mit und begrenzt die Menge an roten Schnörkeln, die in Ihrem Code ignoriert werden sollen. Hoffe das hilft!

    
oddmeter 12.09.2014, 21:43
quelle
0

Sie sollten dies xamarin Binding a Java Library!

    
LOG_TAG 13.08.2014 07:42
quelle