小编Cur*_*ick的帖子

Xamarin.Android绑定到具有依赖项的第三方SDK

我正在使用VS2015 Update3与当前/最新的Xamarin,我正在尝试创建一个绑定库来包装用Java编写的第三方SDK.我有一个C#/ .Net背景,到目前为止几乎没有Java经验.此SDK依赖于3个其他项目,可以作为AAR或通过NuGet获得.

我能够为父AAR创建一个绑定库,使用一些MetaData.xml tweato调整参数类型并返回类型并更正类访问器以满足其抽象基类,所有这些都最初阻止了生成的C#.Net Android来自建筑物的绑定库.现在父绑定程序集构建,但无法执行,因为它需要其他3个AAR依赖项.

需要的依赖关系("#"是下面帖子中提到的每个的别名):

  • "2" - > com.android.support:support-v4:25.1.1
  • "3" - > com.google.android.gms:play-services-location:10.2.0
  • "4" - > com.google.android.gms:play-services-gcm:10.2.0

在这种情况下,如果我需要创建一个绑定dll来包装依赖于3个其他AAR的父AAR:

我应该(A)创建4个绑定程序集 - 父绑定程序集Bind_AAR_1.dll,它依赖于Bind_AAR_2.dll,Bind_AAR_3.dll和Bind_AAR_4.dll?

或者,我是否应该(2)深入研究2个,3个和4个AAR文件并从每个文件中获取JAR文件,并使用"EmbeddedJar"(或其他属性/设置)将它们直接包含在Jars文件夹中的Bind_AAR_1.dll中?

或者,看到2,3和4实际上是通过NuGet可用的,我应该使用NuGet将它们引用到Bind_AAR_1项目吗?如果我使用NuGet引用/包含它们,那么AAR 1中的Javacode是否能够看到AAR 2,3和4中的代码?

我已经尝试了各种方法(A),(B)和(C)的变化,但没有运气,或导致更多工作的结果,这让我想知道什么是最好/正确的方法.

在相关主题中,最佳做法是使用Metadata.xml文件从生成的生成的包装器API中明确删除您未直接计划在Xamarin项目中使用的所有内容(类等)吗?似乎限制接口可能是好的,并且可能还减少绑定dll的构建大小(以及可能的构建时间).

任何帮助,将不胜感激!

柯蒂斯

================================================== =====================

4/11/2017 - 更新

很高兴得到@_JonDouglas之类的投入!但是......仍然无法使这个SDK工作.

我已经尝试了这些方法A,B和C中的每一个,并且已经能够构建我的绑定项目(通过transforming/MetaData.xml完成​​操作).第三方SDK被设计/记录为Java解决方案中的组件的一部分.根据供应商的说明文档,此解决方案将3个依赖项添加到其.gradle文件中,从而在整个Java解决方案中提供对这些项的引用.我没有Java历史,所以在这里展开它.

实际上,当我将SDK(单独使用或使用3种方法中的任何一种)与Visual Studio包装到Xamarin Android Binding Assembly中时,在运行时SDK会遇到ClassNotFound异常(由"未找到Google Play"证明)日志).从所需的Java依赖项中使用的类是以后期绑定的方式创建的,使用类名的字符串,如下所示: 使用上述3种方法中的任何一种在Visual Studio中构建绑定程序集似乎并不重要依赖项(使用项目引用,1个绑定中的1个AAR + 3个Nuget OR 1个AAR + 3个JAR或4个绑定中的4个AAR).在运行时,SDK似乎没有看到它们.也许这是有意义的,它不会 - 在SDK本身中没有指向它们的.gradle(如csproj文件)? try { Class.forName("com.google.android.gms.common.GooglePlayServicesUtil");
//more code here } catch (ClassNotFoundException e) { Log.e("3rd Party SDK", "Google Play not found."); }

我在想我需要做的是(更接近供应商的指令)创建一个Java解决方案,其中包含一个.gradle文件,该文件包含SDK以及Java项目中的3个依赖项,用于创建AAR文件.然后,我相信我可以为最终包含的AAR创建一个Xamarin绑定程序集.然后我将在我的解决方案中添加对此绑定程序集的引用到我的.Andriod程序集并继续.

理论(尚未证实):[失败.请参阅下面的4/12更新.]将Java SDK +编码的依赖项(在.gradle中显式)包装在模块/库中,然后将其包装在Xamarin Android Binding库中.然后,我需要做的就是从这个包装器模块/库中找出我需要使用的公共方法(并因此公开),添加这些公共方法并将调用转发给SDK.

大图:我正在尝试将其设计和编码为跨平台的Xamarin解决方案,但我正在使用特定于Android和IOS的SDK,这些SDK看起来都是应用程序/ …

.net c# xamarin.android xamarin aar

5
推荐指数
1
解决办法
2341
查看次数

标签 统计

.net ×1

aar ×1

c# ×1

xamarin ×1

xamarin.android ×1