las ich die gleichen Binding a Java Library Artikel, den Sie die Anweisungen taten, ging durch, und hatte keine Fehler zu bauen. 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 Anruf in einen Unit-Test-Fall integriert, und er hat bestanden!
Aus meiner Lesung schien es nicht notwendig, die Datei Metadata.xml zu bearbeiten, aber zumindest nach meiner Erfahrung schien es notwendig. Es verwendet XPATH für die Datei obj/Release/api.xml (wie in API Metadata Reference angegeben). Aus diesem Artikel gab es Beispiele für die Umbenennung der beiden Methoden & Methodennamen, so dass es nicht viel Arbeit für mich war, in meine Metadata.xml-Datei einzufügen. Außerdem habe ich das OsmBindingDroidExample aus dem Artikel Binding a Java Library heruntergeladen und auch die Datei Metadata.xml ausgecheckt.
Hier ist meine XML-Referenz auch:
<metadata>
<attr path="/api/package[@name='com.abc.def']" name="managedName">MyRenamedPackage</attr>
<attr path="/api/package[@name='com.abc.def']/class[@name='MyClass']/method[@name='originalJavaMethod']" name="managedName">RenamedDotNetMethod</attr>
</metadata>
So, jetzt in meinem .NET-Code, könnte ich schreiben:
MyRenamedPackage.MyClass.RenamedDotNetMethod(...);
hoffte, das hilft!
EDIT:
ich ein wenig vertrauter mit dem Xamarin Toolkit bekommen haben, und ein Update haben, um diesen zu erleichtern verwenden.
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 ist, was eine Wrapper-Klasse wie das Gehen mit meinem früheren Beispiel aussehen würde (natürlich werden Sie einen Namen sinnvoller auf die Aufgabe in der Hand holen):
public class InovcationWrapper
{
public static void InvokeMethod(...)
{
MyRenamedPackage.MyClass.RenamedDotNetMethod(...);
}
}
Dann in Ihrem Projektcode, würden Sie hat die volle IntelliSense, wenn Sie nur Ihre Wrapper-Klasse nennen:
InvocationWrapper.InvokeMethod(...);
Dies es viel einfacher macht, mit zu arbeiten und begrenzt die Menge des roten Kringel im Code ignoriert werden. Hoffe das hilft!
Benötigen Sie eine "Android-Bibliothek" oder nur eine normale Bibliothek? Ihr Beispiel-Jar ist keine Android-Bibliothek, es ist eine Standart-Java-Bibliothek, die eine Menge kompilierter Klassen enthält. Unterschied in hier ist Android-Bibliothek enthält Ressourcen, nicht nur Java-Code zu teilen. Da dein Beispiel Test.java nichts über Android hat, kannst du es einfach kompilieren und kritzeln. –
Wenn Sie * .jar in * .zip umbenennen, können Sie jedes Archiv-Tool verwenden, um nach innen zu schauen. Ich weiß nicht über Android-Anforderungen, aber Ihre GitHub..bin/a2dp.jar enthält META-INF/MAINFEST.MF mit 2 Bytes nichts, so dass es aussieht wie ein Compiler-Problem, bitte bieten Sie echte Jar – xmojmr