首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Xamarin.Forms.Maps中安装Xamarin.Firebase.Messaging

如何在Xamarin.Forms.Maps中安装Xamarin.Firebase.Messaging
EN

Stack Overflow用户
提问于 2018-02-27 22:41:25
回答 2查看 740关注 0票数 0

我正在尝试使用xamarin.forms.maps在一个干净的空项目上安装nuget Xamarin.Firebase.Messaging包,但由于Xamarin.GooglePlayServices.Basement依赖导致版本冲突而失败。

我的nuget csproj包含以下Xamarin.Forms依赖项:

代码语言:javascript
复制
<ItemGroup>
    <PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
    <PackageReference Include="Xamarin.Forms.Maps" Version="2.5.0.280555" />
</ItemGroup>

Android csproj包含以下nuget依赖项:

代码语言:javascript
复制
  <ItemGroup>
    <Reference Include="Mono.Android" />
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
    <PackageReference Include="Xamarin.Android.Support.Design" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Android.Support.v4" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Forms.Maps">
      <Version>2.5.0.280555</Version>
    </PackageReference>
  </ItemGroup>

当我尝试安装nuget包Xamarin.Firebase.Messaging时,它失败了,出现以下错误:

代码语言:javascript
复制
PM> Install-Package Xamarin.Firebase.Messaging -IgnoreDependencies
GET https://api.nuget.org/v3/registration3-gz-
semver2/xamarin.firebase.messaging/index.json
OK https://api.nuget.org/v3/registration3-gz-
semver2/xamarin.firebase.messaging/index.json 128ms
Restoring packages for 
D:\Projects\mfe\App3\App3\App3.Android\App3.Android.csproj...
Install-Package : Version conflict detected for 
Xamarin.GooglePlayServices.Basement. Reference the package directly from the 
project to resolve this issue. 
App3.Android -> Xamarin.Firebase.Messaging 60.1142.0 -> 
Xamarin.GooglePlayServices.Basement (= 60.1142.0) 
App3.Android -> Xamarin.Forms.GoogleMaps 2.3.0 -> 
Xamarin.GooglePlayServices.Maps 42.1021.1 -> 
Xamarin.GooglePlayServices.Basement (= 42.1021.1).
At line:1 char:1
+ Install-Package Xamarin.Firebase.Messaging -IgnoreDependencies
[...]

是否有解决此问题的方法?类似于版本的回退?

EN

回答 2

Stack Overflow用户

发布于 2018-04-04 22:32:06

编辑

有了下面的答案,我们可以构建并运行,但当尝试显示地图时,会发生大量的java异常。最终解决方案:真正的问题是Xamarin.Forms.Maps对Xamarin.GooglePlayServices.Maps (>= 42.1021.1)的依赖。我以为是因为'>=‘而安装了最新版本,但是安装的版本是42.1021.1。在Android csproj中,我将Xamarin.GooglePlayServices.Maps设置为60.1142.0版本,现在可以安装Firebase和地图,工作起来非常棒!:)

按照Matt Ward的回答,我得到的错误如下:

代码语言:javascript
复制
Type Android.Gms.Maps.Model.CameraPosition` implements 
Android.Runtime.IJavaObject but does not inherit Java.Lang.Object or Java.Lang.Throwable. This is not supported.    .Android`

,正如Briefkasten所评论的那样。

为了避免这个错误,我在安卓项目.csproj (See answer here)中将AndroidErrorOnCustomJavaObject属性设置为false。

在那之后,我得到了新的错误,比如:

代码语言:javascript
复制
java.lang.IllegalArgumentException: already added : Lcom/google/android/gms/internal/zzat

我已经安装了Xamarin.GooglePlayServices.Base 60.1142.0,与之前安装的GooglePlayServices版本相同:

代码语言:javascript
复制
<PackageReference Include="Xamarin.GooglePlayServices.Base">
      <Version>60.1142.0</Version>
</PackageReference>

现在我可以使用Firebase和Maps编译和运行我的Android项目了:‘)

票数 1
EN

Stack Overflow用户

发布于 2018-02-28 03:42:03

如果为Xamarin.GooglePlayServices.Basement 60.1142.0和Xamarin.GooglePlayServices.Tasks 60.1142.0添加显式PackageReferences,则NuGet包恢复似乎可以工作。

代码语言:javascript
复制
  <ItemGroup>
    <PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
    <PackageReference Include="Xamarin.Android.Support.Design" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Android.Support.v4" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="26.1.0.1" />
    <PackageReference Include="Xamarin.GooglePlayServices.Basement" Version="60.1142.0" />
    <PackageReference Include="Xamarin.GooglePlayServices.Tasks" Version="60.1142.0" />
    <PackageReference Include="Xamarin.Forms.Maps">
      <Version>2.5.0.280555</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Firebase.Messaging">
      <Version>60.1142.0</Version>
    </PackageReference>
  </ItemGroup>

我刚刚尝试了您的原始包引用,然后使用还原失败中的信息来查看需要哪些显式引用。第一个失败是:

代码语言:javascript
复制
Version conflict detected for Xamarin.GooglePlayServices.Basement. Reference the package directly from the project to resolve this issue. 
 weaga32ewgegw (>= 1.0.0) -> Xamarin.Firebase.Messaging (>= 60.1142.0) -> Xamarin.GooglePlayServices.Basement (>= 60.1142.0) 
 weaga32ewgegw (>= 1.0.0) -> Xamarin.Forms.Maps (>= 2.5.0.280555) -> Xamarin.GooglePlayServices.Maps (>= 42.1021.1) -> Xamarin.GooglePlayServices.Basement (>= 42.1021.1).

然后,我添加了NuGet恢复输出中指示的显式PackageReference,并进行了重试等操作,直到恢复成功。

我使用的Android项目的TargetFrameworkVersion是v8.1。

这一切是否仍然有效值得测试,因为这是从42.1021.1到60.1142.0的相当大的版本跳跃。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49011292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档