Android 中最新的 Kentico Delivery Client 和 Release 版本是否存在问题

Is there an issue with the latest Kentico Delivery Client and Release build in Android

我在 Xamarin.Android 中遇到最新的 DeliveryClient 问题。 以下代码片段在调试版本中运行良好。

但是,通过取消选中 Use Shared RuntimeUse Fast deployment 这两个打包属性项,我得到了一个运行时错误 Android 项目属性。当您归档要安装在设备上的 APK 时,您必须取消选中这些。 一旦我这样做了,我就会得到下面的堆栈跟踪,这不是很有帮助,但似乎 http 请求只是在某个地方发出并且没有被执行。

这让我想知道是否有人在 Android 发布版本中成功使用了 DeliveryClient 的最新版本。这在 DeliveryClientBuilder.

之前的早期版本中没有发生
    DeliveryClient client = DeliveryClientBuilder
                    .WithOptions(builder => builder
                        .WithProjectId("myProjectId")
                        .UseProductionApi
                        .WithMaxRetryAttempts(5)
                    .Build())
                    .Build();

     Task<string> content = Task.Run(async () =>
                {
                    var res = client.GetItemAsync("hello").Result;
                    var helloFromKC = res.Item.GetString("message_from_kc");
                    return helloFromKC;
                });

04-18 18:24:16.408 I/mono-stdout(17908): One or more errors occurred. One or more errors occurred.
at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in /Users/builder/jenkins/workspace/xamarin-android-d15-8/xamarin-android/external/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:2164 04-18 18:24:16.578 I/mono-stdout(17908): at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in /Users/builder/jenkins/workspace/xamarin-android-d15-8/xamarin-android/external/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Task.cs:2164 at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x0002b] in /Users/builder/jenkins/workspace/xamarin-android-d15-8/xamarin-android/external/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:562 at System.Threading.Tasks.Task1[TResult].get_Result () [0x00000] in /Users/builder/jenkins/workspace/xamarin-android-d15-8/xamarin-android/external/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:532 at App1.MainActivity+<>c__DisplayClass3_0+<b__1>d.MoveNext () [0x00014] in C:\TestApps\AndroidKenticoTest\App1\App1\MainActivity.cs:68 04-18 18:24:16.579 I/mono-stdout(17908): at System.Threading.Tasks.Task1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x0002b] in /Users/builder/jenkins/workspace/xamarin-android-d15-8/xamarin-android/external/mono/mcs/class/referencesource/mscorlib/system/threading/Tasks/Future.cs:562

我终于调试了这个行为的来源。在 Xamarin 中,某些反射方法 not available(或至少不完全支持)在便携式 Class 库(PCL)中,GetExecutingAssembly() 是其中一种方法。

因此,Kentico Cloud Delivery 的 SDK 私有方法 GetSdkVersion()GetSdkPackageId() 抛出异常,因为它们使用了此方法。

作为快速解决方法,您可以直接将 SDK 引用为 project and comment out body of GetSdkPackageId() and GetSdkVersion() 方法(只是 return 一些虚拟字符串。)我将创建一个问题并尝试在SDK(以及 Nuget 包)。

更新 1:除了 Xamarin 中的(不完全)GetExecutingAssembly() 支持外,似乎 it's not possible 在不使用共享运行时(生产模式)时获取程序集的有效路径位置。

更新 2:创建于 GitHub。

issue

更新3:问题is fixed in the SDK and the new patched version 10.0.1已经发布。让我知道它是否适合你。