.jar将android库导入到Xamarin项目中

Andorid又名本地代码(Java代码)可以通过几种方式集成到Xamarin项目中。 本文列出了官方的方式。

我们正在尝试使用文章中描述的Java库绑定方法。 我们的testing类库是专门针对这个问题在Github上发布的 。

我们已经在Android开发人员工具中将其设置为Java Android库。 它在Eclipse中构build成.jar格式,Xamarin网站上的教程假定已经足够了。

如果我们尝试在Visual Studio中将.jar绑定到我们的项目中,那么对象资源pipe理器将向我们显示绑定的asseblie的名称空间,但是在代码中,即使程序集被引用,我们也无法访问名称空间中的方法和类,在我们的testingjava android的lib下载

另一方面,当我们把几乎所有的.jar(这是一个在互联网上的android库),我们可以绑定它并访问它的方法没有问题。

请比较两个.jar,如果可能的话,让我知道我们在github上testing的android库有什么问题,导致我们的命名空间在代码中不可用。

Solutions Collecting From Web of ".jar将android库导入到Xamarin项目中"

我阅读了你所做的绑定一个Java库文章,完成了这个指令,并且没有任何编译错误。 当我尝试使用我的jar文件中的类时,intellisense并不认可任何东西。 然后我阅读了关于API元数据参考的后续文章。 这让我想,也许我应该尝试编辑Transforms / Metadata.xml文件。 在编辑之后,简单地包含对包的重命名,Visual Studio允许(在编译之后)从jar文件中引用一个类。 然后,我试图从类中调用一个方法,并再次得到另一个编译器错误。 于是,我回到了Metadata.xml文件,并添加了一个条目来重命名有问题的方法。 我编辑我的代码来调用重命名的方法,Visual Studio编译好。 我把这个调用集成到一个unit testing用例中,并且通过了!

从我的阅读中,似乎没有必要编辑Metadata.xml文件,但至less在我的经验中似乎有必要。 它在obj / Release / api.xml文件上使用XPATH(如API Metadata Reference中所述 )。 从那篇文章中,有一些重命名包名和方法名的例子,所以我没有太多工作要插入到我的Metadata.xml文件中。 另外,我从“ 绑定Java库”文章中下载了OsmBindingDroidExample,并检出了它们的Metadata.xml文件。

以下是我的XML以供参考:

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

所以,现在在我的.NET代码,我可以写:

 MyRenamedPackage.MyClass.RenamedDotNetMethod(...); 

希望这可以帮助!

编辑:

我已经对Xamarin工具包有了更多的了解,并且有一个更新使得使用这个更容易。

为了限制需要与jar方法交互的代码,Xamarin允许你在Additions文件夹中创buildC#类。 所以,我创build了一个包装类,公开了其他项目可以访问的托pipeC#类中的方法。 既然是C#,那么Visual Studio也没有任何抱怨。

下面是一个包装类看起来像我以前的例子(显然你会select一个更有意义的名字在手边的任务):

 public class InovcationWrapper { public static void InvokeMethod(...) { MyRenamedPackage.MyClass.RenamedDotNetMethod(...); } } 

然后在你的项目代码中,如果你只是调用你的包装类,你就会有完整的intellisense:

 InvocationWrapper.InvokeMethod(...); 

这使得处理和限制在代码中被忽略的红色波形的数量变得更容易。 希望这可以帮助!

你应该试试这个xamarin绑定一个Java库!