Xamarin.Android Google 通过 AAR 绑定播放服务依赖

Xamarin.Android Google Play Services dependency via AAR Binding

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

自从通过 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 中提取 version.xml 文件以供 Google 播放等,等等,等等。它仍然会出现此构建错误。

有没有人有一个很好的例子来说明如何为(本身)依赖于 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 的条目,因为构建过程应该 auto-generated/merged:

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

解决方法:

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

Resources 目录中,创建一个 values 文件夹并添加一个 values.xml 文件,其中包含 google_play_services_version 整数值:

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

注意:如果 Google Play 服务版本发生变化,您需要更新版本值,否则您的应用最终会抛出奇怪的错误,尤其是当您进行应用内购买时....

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

提供了操作方法

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