使用第三方Xamarin组件时,Xamarin应用仅在调试模式下进行编译,而在发布模式下不进行发布 [英] Xamarin app only compiles in debug mode, not release mode, when using 3rd party Xamarin component

查看:79
本文介绍了使用第三方Xamarin组件时,Xamarin应用仅在调试模式下进行编译,而在发布模式下不进行发布的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将Localytics SDK(通过其 Xamarin组件)集成到我的计算机中Xamarin Android应用.它以Debug模式进行编译,但是,如果我切换到Release版本,则会在编译时出错:

I'm attempting to integrate the Localytics SDK (via their Xamarin component) into my Xamarin Android app. It compiles in Debug mode, however if I switch to a Release build then it errors on compile:

/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中定义, 文化=中性,PublicKeyToken = null'),范围 'Xamarin.GooglePlayServices.Gcm,版本= 1.0.0.0,文化=中性, PublicKeyToken = null".当范围不同于定义时 程序集,通常意味着类型已转发. (com.rpr.mobile.droid)

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: Error: Error executing task LinkAssemblies: error XA2006: Could not resolve reference to 'Android.Gms.Gcm.Iid.InstanceIDListenerService' (defined in assembly 'LocalyticsXamarin.Android, Version=4.2.0.29760, Culture=neutral, PublicKeyToken=null') with scope 'Xamarin.GooglePlayServices.Gcm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. When the scope is different from the defining assembly, it usually means that the type is forwarded. (com.rpr.mobile.droid)

如果我将链接器行为仅从Link SDK程序集切换为不链接",那么它可以很好地编译,但是这不是一个选择,因为apk太大.如果我仅切换回Link SDK程序集并将"LocalyticsXamarin.Android"添加到忽略程序集"列表中,它仍然会给出相同的编译错误.

If I switch the Linker Behavior from Link SDK assemblies only to Don't link then it compiles fine, however this isn't an option because then the apk is too large. If I switch back to Link SDK assemblies only and add "LocalyticsXamarin.Android" to the Ignore assemblies list, it still gives the same compile error.

此错误似乎暗示我的应用和Localytics Xamarin包装之间的Google Play服务版本不匹配,但是他们向我发送了使用最新版本(42.1001.0)的包装的更新版本,并且我已经确认它与我们的应用程序匹配.此外,他们自己的示例Android项目可以很好地编译.我已经仔细研究了他们的示例Android项目中的所有设置,并将其更改为与我的匹配,但仍然可以编译,而我的则不然.

This error seems to imply a versioning mismatch in Google Play Services between my app and the Localytics Xamarin wrapper, however they sent me an updated version of their wrapper that uses the latest version (42.1001.0) and I've confirmed that it matches with our app. Furthermore, their own sample Android project compiles fine. I've combed through every setting in their sample Android project and changed it to match mine, and still theirs compiles and mine doesn't.

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

Here is packages.config in my Android project:

<?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:

And here is packages.config for the sample Localytics project that works:

<?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>

要重现问题...

此处是Localytics SDK Xamarin包装器的最新代码,可以很好地构建.您需要获取.xam文件,然后使用Xamarin-Component将其安装到Xamarin Studio.

Here is the Localytics SDK Xamarin wrapper latest code, which builds just fine. You'll want to take the .xam file and install it to Xamarin Studio using Xamarin-Component.

此处是我的Android项目代码的精简版.

Here is a slimmed down version of my Android project code.

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

I apologize for the size of my project, I removed all of the code and resources but it's still big because of the Components and Packages, which I didn't want to remove since they're relevant to the issue. You'll want to open the RPR Mobile - Android.sln solution, change to Release-Prod, then try to build and you'll see the error.

有什么想法吗?

推荐答案

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

The component that ships with this PATCHED version does not seem to be updated to include the references you need such as Xamarin.GooglePlayServices.Iid.

您很有可能需要重新制作此组件,或者让供应商为您重新制作.关于最终将什么.dll添加到项目中,似乎存在一个缓存问题.

You will need to most likely remake this component or have the vendor do so for you. It seems like there's a caching issue here with regards to what final .dll is being added to your project.

这篇关于使用第三方Xamarin组件时,Xamarin应用仅在调试模式下进行编译,而在发布模式下不进行发布的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆