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 方面,我已经尝试了很多很多事情(在过去的几天里),但都没有成功。我想解决以下解决方案:
- 有一个 PCL/Portable "myApp" 通用 code/UI 功能库。
- 让 PCL/Portable 库为 Android 特定代码引用 "myApp.Android" 程序集。
- 让 "myApp.Android" 库将 wrapping/binding 的 "myApp.Android.BindSDK" 程序集引用到第 3 方 SDK。
myApp.Android.BindSDK 程序集应该(我相信):
- 使用 Xamarin 的绑定功能 bind/wrap/include 我用 Java 编写的第 3 方的 SDK。
它对来自 Google Play 服务的 classes/functionality 具有后期绑定依赖性。
- 使用 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 中提取 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"。
我正在使用 Visual Studio 2015 Update 3 为 Android 和 iOS 编写 Xamarin 跨平台应用程序。我需要使用用 Java 编写的第 3 方 SDK 来实现与推送消息传递相关的功能。对于解决方案的 Android 方面,我已经尝试了很多很多事情(在过去的几天里),但都没有成功。我想解决以下解决方案:
- 有一个 PCL/Portable "myApp" 通用 code/UI 功能库。
- 让 PCL/Portable 库为 Android 特定代码引用 "myApp.Android" 程序集。
- 让 "myApp.Android" 库将 wrapping/binding 的 "myApp.Android.BindSDK" 程序集引用到第 3 方 SDK。
myApp.Android.BindSDK 程序集应该(我相信): - 使用 Xamarin 的绑定功能 bind/wrap/include 我用 Java 编写的第 3 方的 SDK。
它对来自 Google Play 服务的 classes/functionality 具有后期绑定依赖性。 - 使用 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 中提取 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"。