我正在尝试将Localytics SDK(通过他们的Xamarin组件)集成到我的Xamarin Android应用程序中。它在Debug模式下编译,但是如果我切换到Release构建,则编译时会出错:
如果我将链接器行为从仅链接SDK程序集切换到不链接,则可以编译通过,但这不是一个选项,因为apk太大。如果我切换回仅链接SDK程序集并将“LocalyticsXamarin.Android”添加到忽略程序集列表中,它仍然会给出相同的编译错误。/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets: Error: 执行任务LinkAssemblies时出错:错误XA2006:无法解析对“Android.Gms.Gcm.Iid.InstanceIDListenerService”的引用 (在程序集“LocalyticsXamarin.Android,Version=4.2.0.29760,Culture=neutral,PublicKeyToken=null”中定义),其范围为 “Xamarin.GooglePlayServices.Gcm,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”。当范围与定义程序集不同时, 这通常意味着该类型已被转发。(com.rpr.mobile.droid)
这个错误似乎暗示着我的应用和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>
为了重现问题,这里是最新的Localytics SDK Xamarin封装代码(此处),可以正常构建。您需要获取.xam文件并使用Xamarin-Component将其安装到Xamarin Studio中。
这里是我Android项目代码的简化版本(此处)。
很抱歉我的项目太大了,虽然我删除了所有的代码和资源,但由于组件和包仍然很大,因此我不想删除它们,因为它们与问题相关。您需要打开RPR Mobile - Android.sln解决方案,切换到Release-Prod,然后尝试构建,您会看到错误。
有任何想法吗?
<TargetFrameworkVersion>
是什么?它是最新的吗?如果不是,应该更新。2. 可以推断出此类型正在被链接。您可以尝试跳过链接Xamarin.GooglePlayServices.Iid
,因为这是实际程序集所在的位置。为了帮助调查,您可以添加一个packages.config
/任何其他库及其版本,以便更容易地查看所有进入您的项目的内容。如果您能创建一个具有相同库的示例应用并上传,那将非常有帮助! - Jon Douglaspackages.config
有所不同:https://github.com/localytics/localytics-xamarin/blob/master/LocalyticsXamarin/Android/packages.config和https://github.com/localytics/localytics-xamarin/tree/master/LocalyticsXamarin/packages。你有提到这个示例的链接吗? - Jon Douglas