From 7d21ac9a849eef2e23f426e100d58574222e7575 Mon Sep 17 00:00:00 2001 From: Pedro Jesus Date: Fri, 30 Sep 2022 13:53:34 -0300 Subject: [PATCH] fix: Added a fallback for arm cpus --- UnoCheck/Checkups/AndroidEmulatorCheckup.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/UnoCheck/Checkups/AndroidEmulatorCheckup.cs b/UnoCheck/Checkups/AndroidEmulatorCheckup.cs index 88cb9f80..99c07c8c 100644 --- a/UnoCheck/Checkups/AndroidEmulatorCheckup.cs +++ b/UnoCheck/Checkups/AndroidEmulatorCheckup.cs @@ -14,6 +14,7 @@ namespace DotNetCheck.Checkups { public class AndroidEmulatorCheckup : Checkup { + const string armArch = "arm64-v8a"; public override IEnumerable DeclareDependencies(IEnumerable checkupIds) => new [] { new CheckupDependency("androidsdk") }; @@ -34,8 +35,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 +115,20 @@ 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 + + // The Path will be something like: + // system-images;android-33;google_apis;arm64-v8a (for arm) + // system-images;android-31;google_apis;x86_64 (for x86 or x64) + ? p.Path.Contains(armArch, 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)));