当使用第三方Xamarin组件时,Xamarin app仅在调试模式下编译,而不是在发布模式下编译

时间:2017-04-10 15:25:16

标签: xamarin xamarin.android xamarin-component

我正在尝试将Localytics SDK(通过他们的Xamarin component)集成到我的Xamarin Android应用中。它在Debug模式下编译,但是如果我切换到Release版本,那么它在编译时出错:

  

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets:   错误:执行任务LinkAssemblies时出错:错误XA2006:无法执行   解析对'Android.Gms.Gcm.Iid.InstanceIDListenerService'的引用   (在程序集'LocalyticsXamarin.Android中定义,版本= 4.2.0.29760,   具有范围的Culture = neutral,PublicKeyToken = null')   'Xamarin.GooglePlayServices.Gcm,Version = 1.0.0.0,Culture = neutral,   公钥=空”。当范围与定义不同时   汇编,通常意味着转发类型。   (com.rpr.mobile.droid)

如果我只将Linker Behavior从Link SDK程序集切换到Do not link,那么它编译得很好,但是这不是一个选项,因为那时apk太大了。如果我只切换回Link SDK程序集并将“LocalyticsXamarin.Android”添加到Ignore程序集列表中,它仍然会产生相同的编译错误。

此错误似乎意味着我的应用与Localytics Xamarin包装器之间的Google Play服务版本不匹配,但是他们向我发送了使用最新版本(42.1001.0)的更新版本的包装,我已经确认它与我们的应用程序匹配。此外,他们自己的示例Android项目编译得很好。我已经梳理了他们的示例Android项目中的每个设置,并将其更改为与我的匹配,但仍然是他们编译而我的没有。

这是我的Android项目中的packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="modernhttpclient" version="2.4.2" targetFramework="MonoAndroid60" />
  <package id="Newtonsoft.Json" version="9.0.1" targetFramework="MonoAndroid60" />
  <package id="Rx-Core" version="2.2.5" targetFramework="monoandroid70" />
  <package id="Rx-Interfaces" version="2.2.5" targetFramework="monoandroid70" />
  <package id="Rx-Linq" version="2.2.5" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Animated.Vector.Drawable" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Compat" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Core.UI" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Core.Utils" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Fragment" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Media.Compat" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.v13" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.v4" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.v7.AppCompat" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Android.Support.Vector.Drawable" version="25.1.1" targetFramework="monoandroid70" />
  <package id="Xamarin.Build.Download" version="0.4.3" targetFramework="monoandroid70" />
  <package id="Xamarin.Firebase.Analytics" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.Firebase.Analytics.Impl" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.Firebase.Common" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.Firebase.Iid" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Analytics" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Analytics.Impl" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Base" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Basement" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Gcm" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Iid" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Location" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Maps" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.TagManager.V4.Impl" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Tasks" version="42.1001.0" targetFramework="monoandroid70" />
</packages>

以下是适用于示例Localytics项目的packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Xamarin.Android.Support.Compat" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.Core.UI" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.Core.Utils" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.Design" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.Fragment" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.Media.Compat" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.Transition" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.v4" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.v7.AppCompat" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.v7.CardView" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.v7.MediaRouter" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.v7.Palette" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.v7.RecyclerView" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Android.Support.Vector.Drawable" version="25.1.1" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Build.Download" version="0.4.3" targetFramework="MonoAndroid70" />
  <package id="Xamarin.Forms" version="2.3.3.193" targetFramework="MonoAndroid70" />
  <package id="Xamarin.GooglePlayServices.Base" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Basement" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Clearcut" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Gass" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Gcm" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Iid" version="42.1001.0" targetFramework="monoandroid70" />
  <package id="Xamarin.GooglePlayServices.Tasks" version="42.1001.0" targetFramework="monoandroid70" />
</packages>

重现问题...

Here是Localytics SDK Xamarin包装器的最新代码,它构建得很好。您将需要使用.xam文件并使用Xamarin-Component将其安装到Xamarin Studio。

Here是我的Android项目代码的精简版。

我为我的项目大小道歉,我删除了所有代码和资源,但由于组件和包,它仍然很大,我不想删除,因为它们与问题相关。您将要打开RPR Mobile - Android.sln解决方案,更改为Release-Prod,然后尝试构建,您将看到错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

PATCHED版本附带的组件似乎未更新,无法包含您需要的引用,例如Xamarin.GooglePlayServices.Iid

您需要最有可能重新制作此组件或让供应商为您执行此操作。关于最终.dll被添加到您的项目中,似乎存在一个缓存问题。