From 0a4f8c27423f8e1b39083ffd0d4f34b42e5fa5fa Mon Sep 17 00:00:00 2001 From: Pedro Jesus Date: Fri, 30 Sep 2022 13:53:34 -0300 Subject: [PATCH] Added a fallback for arm cpus --- UnoCheck/Checkups/AndroidEmulatorCheckup.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/UnoCheck/Checkups/AndroidEmulatorCheckup.cs b/UnoCheck/Checkups/AndroidEmulatorCheckup.cs index 88cb9f80..15b0f6a3 100644 --- a/UnoCheck/Checkups/AndroidEmulatorCheckup.cs +++ b/UnoCheck/Checkups/AndroidEmulatorCheckup.cs @@ -9,6 +9,8 @@ using Xamarin.Installer.AndroidSDK; using Xamarin.Installer.AndroidSDK.Manager; using System.IO; +using Xamarin.Installer.AndroidSDK.Common; +using System.Runtime.InteropServices; namespace DotNetCheck.Checkups { @@ -34,8 +36,8 @@ public override bool ShouldExamine(SharedState history) public override Task Examine(SharedState history) { - if(history.GetEnvironmentVariable("ANDROID_EMULATOR_SKIP") == "true") - { + if (history.GetEnvironmentVariable("ANDROID_EMULATOR_SKIP") == "true") + { return Task.FromResult( new DiagnosticResult(Status.Warning, this, $"Installation skipped for https://github.com/unoplatform/uno.check/issues/48")); } @@ -114,8 +116,15 @@ public override Task Examine(SharedState history) var installedPackages = sdkInstance.Components.AllInstalled(true); - var sdkPackage = installedPackages.FirstOrDefault(p => p.Path.Equals(me.SdkId, StringComparison.OrdinalIgnoreCase)); - + var sdkPackage = installedPackages.FirstOrDefault(p => + { + // This will be false if the proccess runs on Rosetta emulation + // and will install the wrong emulator (x86_64) + // https://github.com/dotnet/runtime/issues/42130 + return Util.IsArm64 + ? p.Path.Contains("arm", StringComparison.OrdinalIgnoreCase) + : p.Path.Equals(me.SdkId, StringComparison.OrdinalIgnoreCase); + }); if (sdkPackage == null && (me.AlternateSdkIds?.Any() ?? false)) sdkPackage = installedPackages.FirstOrDefault(p => me.AlternateSdkIds.Any(a => a.Equals(p.Path, StringComparison.OrdinalIgnoreCase)));