)]}'
{
  "commit": "e1e42652202b428d9e9eaa91fe00d5952587e7ca",
  "tree": "3bc60b095bf7d4946ff776c543df0017b73eb1b1",
  "parents": [
    "a49a6744b6354dad779a5e85d028b1097ea53397"
  ],
  "author": {
    "name": "Matt Boetger",
    "email": "matt.boetger@gmail.com",
    "time": "Fri Jun 12 13:25:54 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jun 12 20:25:54 2026 +0000"
  },
  "message": "[flutter_tools] Add doctor validator warning for multiple adb installations (#186031)\n\nDetects if multiple unique adb binaries are installed on the user\u0027s PATH\nor Android SDK platform-tools. Having multiple adb versions can lead to\nconflicting server instances and device detection failures during\ndevelopment.\n\nThis change adds an `OperatingSystemUtils` dependency injection to\n`AndroidValidator`, resolves canonical paths using\n`resolveSymbolicLinksSync` to avoid duplicate symlink warnings, and\noutputs a hint in `flutter doctor` if multiple unique binaries are\nfound.\n\nFixes https://github.com/flutter/flutter/issues/9709\n\n## Pre-launch Checklist\n\n- [X] I read the [Contributor Guide] and followed the process outlined\nthere for submitting PRs.\n- [X] I read the [AI contribution guidelines] and understand my\nresponsibilities, or I am not using AI tools.\n- [X] I read the [Tree Hygiene] wiki page, which explains my\nresponsibilities.\n- [X] I read and followed the [Flutter Style Guide], including [Features\nwe expect every widget to implement].\n- [X] I signed the [CLA].\n- [X] I listed at least one issue that this PR fixes in the description\nabove.\n- [X] I updated/added relevant documentation (doc comments with `///`).\n- [X] I added new tests to check the change I am making, or this PR is\n[test-exempt].\n- [X] I followed the [breaking change policy] and added [Data Driven\nFixes] where supported.\n- [X] All existing and new tests are passing.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0ada0303668a379025f472afb2bfdf7569f78148",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/android/android_workflow.dart",
      "new_id": "15ff20f5f9c0b835e8816c9b51e4e392f7e80df3",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/android/android_workflow.dart"
    },
    {
      "type": "modify",
      "old_id": "8bf48a52b1f4ff8f6a81266260ddd1afb53b5bb3",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/lib/src/context_runner.dart",
      "new_id": "2bd48aeee7d08be31ab7b3ff2e23fefb95795a30",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/lib/src/context_runner.dart"
    },
    {
      "type": "modify",
      "old_id": "9660a012e599838cfa7c42a34a77bd52e2e05f2a",
      "old_mode": 33188,
      "old_path": "packages/flutter_tools/test/general.shard/android/android_workflow_test.dart",
      "new_id": "fbacdecb9cf59b0a3f81084c179cbe777147061a",
      "new_mode": 33188,
      "new_path": "packages/flutter_tools/test/general.shard/android/android_workflow_test.dart"
    }
  ]
}
