Add maui android info environment summary command#140
Draft
Copilot wants to merge 3 commits into
Draft
Conversation
- Add info command in AndroidCommands.Info.cs with JSON and human-readable output - Add GetSdkPathSource() and GetToolPaths() methods to IAndroidProvider - Implement in AndroidProvider (SDK path source detection, tool path resolution) - Add ToolPaths, AndroidEnvironmentInfo, ApiLevelInfo model records - Register new models in MauiCliJsonContext for JSON serialization - Add AvdManagerPath property to AvdManager - Update FakeAndroidProvider for testing - Add unit tests for info command (JSON output, no SDK, API levels) Agent-Logs-Url: https://github.com/dotnet/maui-labs/sessions/c751c026-8dee-410b-8c2a-564942f3423e Co-authored-by: rmarinho <1235097+rmarinho@users.noreply.github.com>
…utable - Replace Substring calls with C# range syntax for readability - Refactor GroupPackagesByApiLevel to collect data first, then construct immutable ApiLevelInfo records (Platform and BuildTools now use init) Agent-Logs-Url: https://github.com/dotnet/maui-labs/sessions/c751c026-8dee-410b-8c2a-564942f3423e Co-authored-by: rmarinho <1235097+rmarinho@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Add maui android info environment summary command
Add Apr 23, 2026
maui android info environment summary command
jfversluis
requested changes
Apr 24, 2026
Member
jfversluis
left a comment
There was a problem hiding this comment.
CI is failing on the test InfoCommand_Json_HandlesNoSdkInstalled expects "sdk_path": null in the JSON output but the actual output has a different structure.macOS
Assert.Contains() Failure: Sub-string not found
String: "{\\n \"requires_elevation\": false,\\n \"insta\"
Not found: "\"sdk_path\": null"
See: https://github.com/dotnet/maui-labs/actions/runs/24848757663
@rmarinho heads looks like the no-SDK JSON shape doesn't match what the test expects. Likely the AndroidEnvironmentInfo serialization omits or renames sdk_path when no SDK is installed.up
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Single command to display the effective Android development environment: SDK path (and source), JDK path/version, license status, installed API levels grouped with their build-tools and system-images, and tool paths.
Interface & Models
GetSdkPathSource()andGetToolPaths()toIAndroidProviderToolPaths,AndroidEnvironmentInfo,ApiLevelInfo— all immutable withinitpropertiesCommand implementation (
AndroidCommands.Info.cs)MauiCliJsonContextSupporting changes
AndroidProvider.GetSdkPathSource()mirrorsPlatformDetector.Paths.GetAndroidSdkPath()detection order to reportANDROID_HOME/ANDROID_SDK_ROOT/default/auto-detectedAndroidProvider.GetToolPaths()delegates toSdkManager,AvdManager,AdbAvdManager.AvdManagerPath(was only stored as a local in the constructor)MauiCliJsonContextfor AOT-compatible serializationTests
infosubcommand exists underandroidFakeAndroidProvider+FakeJdkManager: SDK/JDK paths, no-SDK case, API level grouping with system imagesBuild note
Local build was blocked by sandbox DNS restrictions on
*.vsblob.vsassets.io(NuGet blob storage). Code follows existing patterns and should build in CI.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:
0t3vsblobprodcus362.vsblob.vsassets.io/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)/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(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/A6FE22A7EAE024DC10745EF2BBF84705/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 conf��(dns block)11vvsblobprodcus336.vsblob.vsassets.io/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)/usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/EE51EADBF905A9CDD1F98BCE581BDAD5/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 conf��(dns block)1javsblobprodcus364.vsblob.vsassets.io/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)1k9vsblobprodcus379.vsblob.vsassets.io/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/maui-labs/maui-labs/platforms/Linux.Gtk4/Linux.Gtk4.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)/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 SBui��(dns block)/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)1oavsblobprodcus350.vsblob.vsassets.io/usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/EE51EADBF905A9CDD1F98BCE581BDAD5/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 conf��(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/F4AB35793F631CCE56C78BC940712093/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 conf�� get .DevFlow.Agent.IntegrationTests/Microsoft.Maui.DevFlow.Agent.IntegrationTests.csproj ing/dotnet-eng/nuget/v3/flat2/microsoft.dotnet.arcade.sdk/10.0.0-beta.26203.109/microsoft.dotnet-m(dns block)1p7vsblobprodcus324.vsblob.vsassets.io/usr/bin/dotnet dotnet restore --no-dependencies /home/REDACTED/work/maui-labs/maui-labs/platforms/Linux.Gtk4/Linux.Gtk4.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)/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 SBui��(dns block)/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)1s1vsblobprodcus386.vsblob.vsassets.io/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 SBui��(dns block)/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)/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)2kmvsblobprodcus39.vsblob.vsassets.io/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 SBui�� linuxagent-logcollector.slice --global counting=yes yAccounting=yes ota=5% yHigh=170M(dns block)/usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/E1543C03D4D61D32B7FB31E3342A5DFF/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 SBui�� get --local tnet/tools/bash pull.rebase(dns block)2zrvsblobprodcus388.vsblob.vsassets.io/usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/1547C205BD65A89A30F6427AD94CC555/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)/usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/22B7313D7A8D78792D3CC44034464790/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 conf�� Cli.UnitTests/Fakes/FakeAndroidProvider.cs --get nfig/composer/vendor/bin/bash(dns block)37bvsblobprodcus311.vsblob.vsassets.io/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)/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)/usr/bin/dotnet dotnet restore --no-dependencies /tmp/codeql-scratch-a7656e55742be5f5/dbs/csharp/working/F4AB35793F631CCE56C78BC940712093/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 conf�� get .DevFlow.Agent.IntegrationTests/Microsoft.Maui.DevFlow.Agent.IntegrationTests.csproj ing/dotnet-eng/nuget/v3/flat2/microsoft.dotnet.arcade.sdk/10.0.0-beta.26203.109/microsoft.dotnet-m(dns block)37cvsblobprodcus359.vsblob.vsassets.io/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 SBui��(dns block)4m6vsblobprodcus384.vsblob.vsassets.io/usr/bin/dotnet dotnet restore src/Cli/Cli.slnf(dns block)/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)4myvsblobprodcus32.vsblob.vsassets.io/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)/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)4vyvsblobprodcus361.vsblob.vsassets.io/usr/bin/dotnet dotnet build src/Cli/Cli.slnf(dns block)/usr/bin/dotnet dotnet restore src/Cli/Cli.slnf(dns block)/usr/bin/dotnet dotnet restore src/Cli/Cli.slnf --source REDACTED --source REDACTED DROP(dns block)51yvsblobprodcus36.vsblob.vsassets.io/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)/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)5dkvsblobprodcus355.vsblob.vsassets.io/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)/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)