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 Runtime 和 Use 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已经发布。让我知道它是否适合你。
我在 Xamarin.Android 中遇到最新的 DeliveryClient 问题。 以下代码片段在调试版本中运行良好。
但是,通过取消选中 Use Shared Runtime 和 Use 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已经发布。让我知道它是否适合你。