繁体   English   中英

Xamarin.Android通过AAR绑定的Google Play服务依赖性

[英]Xamarin.Android Google Play Services dependency via AAR Binding

我正在使用Visual Studio 2015 Update 3编写适用于Android和iOS的Xamarin跨平台应用程序。 我需要利用Java编写的第三方SDK来实现与Push消息相关的功能。 对于该解决方案的Android方面,我已经尝试了很多很多事情(现在已经过了几天),但是没有成功。 我想解决以下问题:

  • 有一个PCL /便携式“ myApp”库,用于通用代码/ UI功能。
  • 让PCL / Portable库引用针对Android特定代码的“ myApp.Android”程序集。
  • 让“ myApp.Android”库引用一个“ myApp.Android.BindSDK”程序集,用于包装/绑定到第三方SDK。
    myApp.Android.BindSDK程序集应该(我相信):
  • 使用Xamarin的绑定功能来绑定/包装/包含我用Java编写的第三方SDK。
    它对Google Play服务的类/功能具有后期绑定依赖关系。
  • 使用NuGet将Xamarin.GooglePlayServices.Gcm包含到“ .Android.BindSDK”项目中。

自从通过NuGet将Google Play服务包含到myApp.Android.BindSDK项目中以来,我收到以下编译错误:

error APT0000: No resource found that matches the given name 
(at 'value' with value '@integer/google_play_services_version').

我已经尝试了很多在论坛上发布的内容,例如关闭解决方案,删除bin和obj文件夹,从AAR中的JAR中的JAR中提取version.xml文件以用于Google Play等,等等。它仍然会收到此构建错误。

有没有人有一个很好的例子说明如何为本身依赖于Google Play服务的android / Java SDK创建Xamarin绑定包装?

检查您的绑定项目的.csproj包含Xamarin.GooglePlayServices.Basement.targets因为该包中的资源任务是提取Play服务版本并将其添加到库资源中的任务:

例:

<Import Project="..\packages\Xamarin.GooglePlayServices.Basement.42.1001.0\build\MonoAndroid70\Xamarin.GooglePlayServices.Basement.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Basement.42.1001.0\build\MonoAndroid70\Xamarin.GooglePlayServices.Basement.targets')" />

此外,检查结合项目清单尚未包含一个条目com.google.android.gms.version ,因为这应该是自动生成/编译过程合并:

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

解决方法:

注意:我从来没有在包含Play Services的绑定项目中手动执行此操作,遇到了一些客户端的绑定项目,这些项目会导致.aar资源合并过程在引用的程序包上失败(假设在其中存在冲突的Play Services资源.aar但修改第三方.aar通常不值得)

Resources目录中,创建一个values文件夹,并添加一个带有google_play_services_version整数值的values.xml文件:

<integer name="google_play_services_version">10084000</integer>

注意:如果Google Play服务版本更改,则需要更新版本值,否则您的应用最终会引发奇怪的错误,尤其是在您进行InApp购买时。

经过反复试验,我能够创建一个可行的解决方案。

这篇文章中详细提供了操作方法

关键:我上面遗漏的东西似乎是在绑定程序集中不包含第三方SDK的依赖项,例如:用于包装SDK的“ myApp.Android.BindSDK”,而是通过NuGet进入解决方案的Android程序集引用绑定程序集,例如:“ myApp.Android”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM