Skip to content

Fix E2102: android install skips SDK bootstrap when directory exists but cmdline-tools is missing#63

Draft
Copilot wants to merge 2 commits intomainfrom
copilot/fix-android-sdk-install-error
Draft

Fix E2102: android install skips SDK bootstrap when directory exists but cmdline-tools is missing#63
Copilot wants to merge 2 commits intomainfrom
copilot/fix-android-sdk-install-error

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 2, 2026

IsSdkInstalled only checked directory existence, so an empty SDK path would be considered "already installed," causing sdkmanager invocation to fail with E2102 at package install time.

Changes

  • AndroidProvider.cs: Extend IsSdkInstalled to also require cmdline-tools/ to exist within the SDK path — the necessary condition for sdkmanager to be available:

    // Before
    public bool IsSdkInstalled => !string.IsNullOrEmpty(SdkPath) && Directory.Exists(SdkPath);
    
    // After
    public bool IsSdkInstalled => !string.IsNullOrEmpty(SdkPath) && Directory.Exists(SdkPath)
        && Directory.Exists(Path.Combine(SdkPath, "cmdline-tools"));

    This ensures the full bootstrap runs when the directory exists but cmdline-tools is absent, fixing both the interactive and JSON/CI install paths. maui doctor also benefits: an incomplete SDK now reports "Android SDK not found" rather than "Android SDK OK" + "SDK Manager not found".

  • AndroidProviderTests.cs: Add AndroidProviderIsSdkInstalledTests covering the four key states: directory + cmdline-tools present, directory only, directory missing, null path.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 1k9vsblobprodcus379.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/8C05F420C0A27C744026142384549B8D/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 1p7vsblobprodcus324.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet test src/Cli/Microsoft.Maui.Cli.UnitTests/ -v minimal (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore src/Cli/Microsoft.Maui.Cli.UnitTests/Microsoft.Maui.Cli.UnitTests.csproj (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/maui-labs/maui-labs/MauiLabs.slnx --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true (dns block)
  • 1s1vsblobprodcus386.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/5B74F40C93A078C72D8DF238B871667A/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 2kmvsblobprodcus39.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/46EB19D8E6D150879BD3367A72FC2FBC/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 2zrvsblobprodcus388.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/89B4107364AD016C1857C138B15EFD04/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force m/_n�� (dns block)
  • 37bvsblobprodcus311.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/5B74F40C93A078C72D8DF238B871667A/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 4myvsblobprodcus32.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/0D40234D717C8D8DC65416C06F8EE66F/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/CCFF80F07862756B14349BFA65E8CEB4/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/89B4107364AD016C1857C138B15EFD04/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force m/_n�� (dns block)
  • 4vyvsblobprodcus361.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/CCFF80F07862756B14349BFA65E8CEB4/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/89B4107364AD016C1857C138B15EFD04/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force m/_n�� (dns block)
  • 6s7vsblobprodcus313.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/85ED87705A97662A3C6AC9F60AF6DBA9/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/71D8F1331231B3366990DDCEAEF101CB/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/89B4107364AD016C1857C138B15EFD04/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force m/_n�� (dns block)
  • 7devsblobprodcus323.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/8C05F420C0A27C744026142384549B8D/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • 7tjvsblobprodcus341.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/8A2F7455CD2F458A2062C7DF2BE22B1E/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force ng/emptyFakeDotnetRoot ing/emptyFakeDotnetRoot (dns block)
  • 96bvsblobprodcus338.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/CB3D70C1C3CCEDE61E9080295E05A90C/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • e7bvsblobprodcus348.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/4DD03B7307853E158CACADCFA3560377/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • gbsvsblobprodcus365.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/BDA7B32C5A2E208C2B285E396532BAD8/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • gervsblobprodcus329.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/CB3D70C1C3CCEDE61E9080295E05A90C/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • imzvsblobprodcus368.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/9AA715C847E13D676D5E6D186CBCC963/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • josvsblobprodcus372.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/8C05F420C0A27C744026142384549B8D/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/0D40234D717C8D8DC65416C06F8EE66F/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • k0ivsblobprodcus356.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/5B74F40C93A078C72D8DF238B871667A/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • k4kvsblobprodcus344.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/B8868C850D22F21D56C42BA51547696A/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/97B6F2CA4656254F7A852783585D5FF8/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • kh4vsblobprodcus325.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/2529387D41AB7E9F301C936979D09EA9/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • l49vsblobprodcus358.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/5B74F40C93A078C72D8DF238B871667A/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • n3kvsblobprodcus335.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/6EDBD3A810A2F498C79EAF56BB45C68B/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/3F3C89B33496786B1BC802D045E3B1EC/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • p2ovsblobprodcus312.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/89B4107364AD016C1857C138B15EFD04/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force m/_n�� (dns block)
  • pc2vsblobprodcus360.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/CCFF80F07862756B14349BFA65E8CEB4/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/89B4107364AD016C1857C138B15EFD04/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force m/_n�� (dns block)
  • pe3vsblobprodcus354.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/5B74F40C93A078C72D8DF238B871667A/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • se1vsblobprodcus349.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/AF113C7D0AE30FAEE8642596EDEE32A2/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • securitytools.pkgs.visualstudio.com
    • Triggering command: /opt/hostedtoolcache/CodeQL/2.25.1/x64/codeql/csharp/tools/linux64/Semmle.Autobuild.CSharp /opt/hostedtoolcache/CodeQL/2.25.1/x64/codeql/csharp/tools/linux64/Semmle.Autobuild.CSharp (dns block)
  • sqdvsblobprodcus333.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/9B5E6A85E5070FA04B3D0AF1F267C383/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force ng/emptyFakeDotnetRoot ing/emptyFakeDotnetRoot (dns block)
  • st8vsblobprodcus339.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/5B74F40C93A078C72D8DF238B871667A/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • tphvsblobprodcus375.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/5B74F40C93A078C72D8DF238B871667A/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • u6ovsblobprodcus377.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/3A31E2867A9E7AA6F06B7D2833E11491/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • uy6vsblobprodcus34.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet test src/Cli/Microsoft.Maui.Cli.UnitTests/ -v minimal (dns block)
  • vwvvsblobprodcus334.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/CCFF80F07862756B14349BFA65E8CEB4/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • x3yvsblobprodcus370.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/89B4107364AD016C1857C138B15EFD04/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force m/_n�� (dns block)
  • xupvsblobprodcus332.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/CB3D70C1C3CCEDE61E9080295E05A90C/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)
  • ytvvsblobprodcus310.vsblob.vsassets.io
    • Triggering command: /usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/FDF62E18DC280BA5DDB971B891D2EB18/missingpackages_workingdir --packages /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/missingpackages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal --configfile /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/nugetconfig/nuget.config --force (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

…mpty SDK directory

When IsSdkInstalled only checked directory existence, an empty Android SDK directory
would appear 'installed', causing sdkmanager not found (E2102) at package install time.

Now also requires cmdline-tools/ to exist within the SDK path before considering the
SDK as installed. This triggers the bootstrap process when cmdline-tools is missing.

Agent-Logs-Url: https://github.com/dotnet/maui-labs/sessions/0d00d3dd-9d0d-424b-9b87-29a3bf0b5980

Co-authored-by: rmarinho <1235097+rmarinho@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix E2102 error for maui android install command Fix E2102: android install skips SDK bootstrap when directory exists but cmdline-tools is missing Apr 2, 2026
Copilot AI requested a review from rmarinho April 2, 2026 20:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[MAUI CLI] android install fails with E2102 when SDK directory exists but cmdline-tools is missing

2 participants