{
  "name": "adb",
  "description": "Android Debug Bridge",
  "options": [
    {
      "names": [
        "-a"
      ],
      "description": "Listen on all network interfaces, not just localhost"
    },
    {
      "names": [
        "-d"
      ],
      "description": "Use USB device (error if multiple devices connected)"
    },
    {
      "names": [
        "-e"
      ],
      "description": "Use TCP/IP device (error if multiple TCP/IP devices available)"
    },
    {
      "names": [
        "-s"
      ],
      "description": "Use device with given serial (overrides $ANDROID_SERIAL)",
      "args": [
        {
          "name": "SERIAL"
        }
      ]
    },
    {
      "names": [
        "-t"
      ],
      "description": "Use device with given transport id",
      "args": [
        {
          "name": "ID"
        }
      ]
    },
    {
      "names": [
        "-H"
      ],
      "description": "Name of adb server host [default=localhost]",
      "args": [
        {
          "name": "host name"
        }
      ]
    },
    {
      "names": [
        "-P"
      ],
      "description": "Port of adb server [default=5037]",
      "args": [
        {
          "name": "port"
        }
      ]
    },
    {
      "names": [
        "-L"
      ],
      "description": "Listen on given socket for adb server [default=tcp:localhost:5037]",
      "args": [
        {
          "name": "socket"
        }
      ]
    }
  ],
  "subcommands": [
    {
      "name": "devices",
      "description": "List connected devices",
      "options": [
        {
          "names": [
            "-l"
          ],
          "description": "Long output"
        }
      ]
    },
    {
      "name": "help",
      "description": "Show this help message"
    },
    {
      "name": "get-state",
      "description": "Print offline | bootloader | device"
    },
    {
      "name": "get-serialno",
      "description": "Print <serial-number>"
    },
    {
      "name": "get-devpath",
      "description": "Print <device-path>"
    },
    {
      "name": "remount",
      "description": "Remount partitions read-write. if a reboot is required, -R will automatically reboot the device",
      "options": [
        {
          "names": [
            "-R"
          ],
          "description": "Reboot device"
        }
      ]
    },
    {
      "name": "jdwp",
      "description": "List pids of processes hosting a JDWP transport"
    },
    {
      "name": "root",
      "description": "Restart adbd with root permissions"
    },
    {
      "name": "unroot",
      "description": "Restart adbd without root permissions"
    },
    {
      "name": "usb",
      "description": "Restart adbd listening on USB"
    },
    {
      "name": "sideload",
      "description": "Sideload the given full OTA package",
      "args": [
        {
          "name": "OTAPACKAGE"
        }
      ]
    },
    {
      "name": "start-server",
      "description": "Ensure that there is a server running"
    },
    {
      "name": "kill-server",
      "description": "Kill the server if it is running"
    },
    {
      "name": "reconnect",
      "description": "Kick connection from host side to force reconnect",
      "subcommands": [
        {
          "name": "device",
          "description": "Kick connection from device side to force reconnect"
        },
        {
          "name": "offline",
          "description": "Reset offline/unauthorized devices to force reconnect`"
        }
      ]
    },
    {
      "name": "tcpip",
      "description": "Restart adbd listening on TCP on PORT",
      "args": [
        {
          "name": "PORT"
        }
      ]
    },
    {
      "name": "reboot",
      "description": "Reboot the device; defaults to booting system image but supports bootloader and recovery too. sideload reboots into recovery and automatically starts sideload mode, sideload-auto-reboot is the same but reboots after sideloading",
      "args": [
        {
          "name": "type",
          "isOptional": true,
          "suggestions": [
            "bootloader",
            "recovery",
            "sideload",
            "sideload-auto-reboot"
          ]
        }
      ]
    },
    {
      "name": "disable-verity",
      "description": "Disable dm-verity checking on userdebug builds"
    },
    {
      "name": "enable-verity",
      "description": "Re-enable dm-verity checking on userdebug builds"
    },
    {
      "name": "wait-for-device",
      "description": "Wait for state=device"
    },
    {
      "name": "wait-for-recovery",
      "description": "Wait for state=recovery"
    },
    {
      "name": "wait-for-rescue",
      "description": "Wait for state=rescue"
    },
    {
      "name": "wait-for-sideload",
      "description": "Wait for state=sideload"
    },
    {
      "name": "wait-for-bootloader",
      "description": "Wait for state=bootloader"
    },
    {
      "name": "wait-for-disconnect",
      "description": "Wait for state=disconnect"
    },
    {
      "name": "wait-for-usb-device",
      "description": "Wait for usb in state=device"
    },
    {
      "name": "wait-for-usb-recovery",
      "description": "Wait for usb in state=recovery"
    },
    {
      "name": "wait-for-usb-rescue",
      "description": "Wait for usb in state=rescue"
    },
    {
      "name": "wait-for-usb-sideload",
      "description": "Wait for usb in state=sideload"
    },
    {
      "name": "wait-for-usb-bootloader",
      "description": "Wait for usb in state=bootloader"
    },
    {
      "name": "wait-for-usb-disconnect",
      "description": "Wait for usb in state=disconnect"
    },
    {
      "name": "wait-for-local-device",
      "description": "Wait for local in state=device"
    },
    {
      "name": "wait-for-local-recovery",
      "description": "Wait for local in state=recovery"
    },
    {
      "name": "wait-for-local-rescue",
      "description": "Wait for local in state=rescue"
    },
    {
      "name": "wait-for-local-sideload",
      "description": "Wait for local in state=sideload"
    },
    {
      "name": "wait-for-local-bootloader",
      "description": "Wait for local in state=bootloader"
    },
    {
      "name": "wait-for-local-disconnect",
      "description": "Wait for local in state=disconnect"
    },
    {
      "name": "wait-for-any-device",
      "description": "Wait for any in state=device"
    },
    {
      "name": "wait-for-any-recovery",
      "description": "Wait for any in state=recovery"
    },
    {
      "name": "wait-for-any-rescue",
      "description": "Wait for any in state=rescue"
    },
    {
      "name": "wait-for-any-sideload",
      "description": "Wait for any in state=sideload"
    },
    {
      "name": "wait-for-any-bootloader",
      "description": "Wait for any in state=bootloader"
    },
    {
      "name": "wait-for-any-disconnect",
      "description": "Wait for any in state=disconnect"
    },
    {
      "name": "keygen",
      "description": "Generate adb public/private key; private key stored in FILE",
      "args": [
        {
          "name": "FILE",
          "template": "filepaths"
        }
      ]
    },
    {
      "name": "logcat",
      "description": "Show device log (logcat --help for more)"
    },
    {
      "name": "version",
      "description": "Show version num"
    },
    {
      "name": "connect",
      "description": "Connect to a device via TCP/IP [default port=5555]",
      "args": [
        {
          "name": "HOST[:PORT]"
        }
      ]
    },
    {
      "name": "disconnect",
      "description": "Disconnect from given TCP/IP device [default port=5555], or all",
      "args": [
        {
          "name": "HOST[:PORT]",
          "isOptional": true
        }
      ]
    },
    {
      "name": "uninstall",
      "description": "Remove this app package from the device",
      "options": [
        {
          "names": [
            "-k"
          ],
          "description": "Keep the data and cache directories"
        }
      ]
    },
    {
      "name": "bugreport",
      "description": "Write bugreport to given PATH [default=bugreport.zip];",
      "args": [
        {
          "name": "PATH",
          "isOptional": true
        }
      ]
    },
    {
      "name": "pair",
      "description": "Pair with a device for secure TCP/IP communication",
      "args": [
        {
          "name": "HOST[:PORT]"
        },
        {
          "name": "[PAIRING CODE]",
          "isOptional": true
        }
      ]
    },
    {
      "name": "ppp",
      "description": "Run PPP over USB",
      "args": [
        {
          "name": "TTY"
        },
        {
          "name": "[PARAMETER...]",
          "isOptional": true,
          "isVariadic": true
        }
      ]
    },
    {
      "name": "emu",
      "description": "Run emulator console command",
      "args": [
        {
          "name": "COMMAND"
        }
      ]
    },
    {
      "name": "install",
      "description": "Push a single package to the device and install it",
      "options": [
        {
          "names": [
            "-l"
          ],
          "description": "Forward-lock the app"
        },
        {
          "names": [
            "-r"
          ],
          "description": "Replace existing application"
        },
        {
          "names": [
            "-t"
          ],
          "description": "Allow test packages"
        },
        {
          "names": [
            "-d"
          ],
          "description": "Allow version code downgrade (debuggable packages only)"
        },
        {
          "names": [
            "-s"
          ],
          "description": "Install on SD card instead of internal storage"
        },
        {
          "names": [
            "-g"
          ],
          "description": "Grant all runtime permissions"
        },
        {
          "names": [
            "--abi"
          ],
          "description": "Override platform's default ABI",
          "args": [
            {
              "name": "ABI"
            }
          ]
        },
        {
          "names": [
            "--instant"
          ],
          "description": "Cause the app to be installed as an ephemeral install app"
        },
        {
          "names": [
            "--no-streaming"
          ],
          "description": "Always push APK to device and invoke Package Manager as separate steps"
        },
        {
          "names": [
            "--streaming"
          ],
          "description": "Force streaming APK directly into Package Manager"
        },
        {
          "names": [
            "--fastdeploy"
          ],
          "description": "Use fast deploy"
        },
        {
          "names": [
            "--no-fastdeploy"
          ],
          "description": "Prevent use of fast deploy"
        },
        {
          "names": [
            "--force-agent"
          ],
          "description": "Force update of deployment agent when using fast deploy"
        },
        {
          "names": [
            "--date-check-agent"
          ],
          "description": "Update deployment agent when local version is newer and using fast deploy"
        },
        {
          "names": [
            "--version-check-agent"
          ],
          "description": "Update deployment agent when local version has different version code and using fast deploy"
        },
        {
          "names": [
            "--local-agent"
          ],
          "description": "Locate agent files from local source build (instead of SDK location)"
        }
      ],
      "args": [
        {
          "name": "PACKAGE",
          "template": "filepaths"
        }
      ]
    },
    {
      "name": "install-multiple",
      "description": "Push multiple APKs to the device for a single package and install them",
      "options": [
        {
          "names": [
            "-p"
          ],
          "description": "Partial application install (install-multiple only)"
        },
        {
          "names": [
            "-l"
          ],
          "description": "Forward-lock the app"
        },
        {
          "names": [
            "-r"
          ],
          "description": "Replace existing application"
        },
        {
          "names": [
            "-t"
          ],
          "description": "Allow test packages"
        },
        {
          "names": [
            "-d"
          ],
          "description": "Allow version code downgrade (debuggable packages only)"
        },
        {
          "names": [
            "-s"
          ],
          "description": "Install on SD card instead of internal storage"
        },
        {
          "names": [
            "-g"
          ],
          "description": "Grant all runtime permissions"
        },
        {
          "names": [
            "--abi"
          ],
          "description": "Override platform's default ABI",
          "args": [
            {
              "name": "ABI"
            }
          ]
        },
        {
          "names": [
            "--instant"
          ],
          "description": "Cause the app to be installed as an ephemeral install app"
        },
        {
          "names": [
            "--no-streaming"
          ],
          "description": "Always push APK to device and invoke Package Manager as separate steps"
        },
        {
          "names": [
            "--streaming"
          ],
          "description": "Force streaming APK directly into Package Manager"
        },
        {
          "names": [
            "--fastdeploy"
          ],
          "description": "Use fast deploy"
        },
        {
          "names": [
            "--no-fastdeploy"
          ],
          "description": "Prevent use of fast deploy"
        },
        {
          "names": [
            "--force-agent"
          ],
          "description": "Force update of deployment agent when using fast deploy"
        },
        {
          "names": [
            "--date-check-agent"
          ],
          "description": "Update deployment agent when local version is newer and using fast deploy"
        },
        {
          "names": [
            "--version-check-agent"
          ],
          "description": "Update deployment agent when local version has different version code and using fast deploy"
        },
        {
          "names": [
            "--local-agent"
          ],
          "description": "Locate agent files from local source build (instead of SDK location)"
        }
      ],
      "args": [
        {
          "name": "PACKAGE",
          "isVariadic": true,
          "template": "filepaths"
        }
      ]
    },
    {
      "name": "install-multi-package",
      "description": "Push one or more packages to the device and install them atomically",
      "options": [
        {
          "names": [
            "-p"
          ],
          "description": "Partial application install (install-multiple only)"
        },
        {
          "names": [
            "-l"
          ],
          "description": "Forward-lock the app"
        },
        {
          "names": [
            "-r"
          ],
          "description": "Replace existing application"
        },
        {
          "names": [
            "-t"
          ],
          "description": "Allow test packages"
        },
        {
          "names": [
            "-d"
          ],
          "description": "Allow version code downgrade (debuggable packages only)"
        },
        {
          "names": [
            "-s"
          ],
          "description": "Install on SD card instead of internal storage"
        },
        {
          "names": [
            "-g"
          ],
          "description": "Grant all runtime permissions"
        },
        {
          "names": [
            "--abi"
          ],
          "description": "Override platform's default ABI",
          "args": [
            {
              "name": "ABI"
            }
          ]
        },
        {
          "names": [
            "--instant"
          ],
          "description": "Cause the app to be installed as an ephemeral install app"
        },
        {
          "names": [
            "--no-streaming"
          ],
          "description": "Always push APK to device and invoke Package Manager as separate steps"
        },
        {
          "names": [
            "--streaming"
          ],
          "description": "Force streaming APK directly into Package Manager"
        },
        {
          "names": [
            "--fastdeploy"
          ],
          "description": "Use fast deploy"
        },
        {
          "names": [
            "--no-fastdeploy"
          ],
          "description": "Prevent use of fast deploy"
        },
        {
          "names": [
            "--force-agent"
          ],
          "description": "Force update of deployment agent when using fast deploy"
        },
        {
          "names": [
            "--date-check-agent"
          ],
          "description": "Update deployment agent when local version is newer and using fast deploy"
        },
        {
          "names": [
            "--version-check-agent"
          ],
          "description": "Update deployment agent when local version has different version code and using fast deploy"
        },
        {
          "names": [
            "--local-agent"
          ],
          "description": "Locate agent files from local source build (instead of SDK location)"
        }
      ],
      "args": [
        {
          "name": "PACKAGE",
          "isVariadic": true,
          "template": "filepaths"
        }
      ]
    },
    {
      "name": "shell",
      "description": "Run remote shell command (interactive shell if no command given)",
      "options": [
        {
          "names": [
            "-e"
          ],
          "description": "Choose escape character, or `none` default '~'"
        },
        {
          "names": [
            "-n"
          ],
          "description": "Don't read from stdin"
        },
        {
          "names": [
            "-T"
          ],
          "description": "Disable pty allocation"
        },
        {
          "names": [
            "-t"
          ],
          "description": "Allocate a pty if on a tty"
        },
        {
          "names": [
            "-tt"
          ],
          "description": "-tt: force pty allocation"
        },
        {
          "names": [
            "-x"
          ],
          "description": "Disable remote exit codes and stdout/stderr separation"
        }
      ],
      "args": [
        {
          "name": "COMMANDS ...",
          "isOptional": true,
          "isVariadic": true
        }
      ]
    },
    {
      "name": "mdns",
      "description": "Mdns utils",
      "subcommands": [
        {
          "name": "check",
          "description": "Check if mdns discovery is available"
        },
        {
          "name": "services",
          "description": "List all discovered services"
        }
      ]
    },
    {
      "name": "push",
      "description": "Copy local files/directories to device",
      "options": [
        {
          "names": [
            "--sync"
          ],
          "description": "Only push files that are newer on the host than the device"
        },
        {
          "names": [
            "-n"
          ],
          "description": "Dry run: push files to device without storing to the filesystem"
        },
        {
          "names": [
            "-z"
          ],
          "description": "Enable compression with a specified algorithm (any, none, brotli)",
          "args": [
            {
              "name": "ALGORITHM",
              "suggestions": [
                "any",
                "none",
                "brotli"
              ]
            }
          ]
        },
        {
          "names": [
            "-Z"
          ],
          "description": "Disable compression"
        }
      ],
      "args": [
        {
          "name": "LOCAL",
          "isVariadic": true,
          "template": "filepaths"
        },
        {
          "name": "REMOTE"
        }
      ]
    },
    {
      "name": "sync",
      "description": "Sync a local build from $ANDROID_PRODUCT_OUT to the device (default all)",
      "options": [
        {
          "names": [
            "-n"
          ],
          "description": "Dry run: push files to device without storing to the filesystem"
        },
        {
          "names": [
            "-l"
          ],
          "description": "List files that would be copied, but don't copy them"
        },
        {
          "names": [
            "-z"
          ],
          "description": "Enable compression with a specified algorithm (any, none, brotli)",
          "args": [
            {
              "name": "ALGORITHM",
              "suggestions": [
                "any",
                "none",
                "brotli"
              ]
            }
          ]
        },
        {
          "names": [
            "-Z"
          ],
          "description": "Disable compression"
        }
      ],
      "args": [
        {
          "isOptional": true,
          "suggestions": [
            "all",
            "data",
            "odm",
            "oem",
            "product",
            "system",
            "system_ext",
            "vendor"
          ]
        }
      ]
    },
    {
      "name": "pull",
      "description": "Copy files/dirs from device",
      "options": [
        {
          "names": [
            "-a"
          ],
          "description": "Preserve file timestamp and mode"
        },
        {
          "names": [
            "-z"
          ],
          "description": "Enable compression with a specified algorithm (any, none, brotli)",
          "args": [
            {
              "name": "ALGORITHM",
              "suggestions": [
                "any",
                "none",
                "brotli"
              ]
            }
          ]
        },
        {
          "names": [
            "-Z"
          ],
          "description": "Disable compression"
        }
      ],
      "args": [
        {
          "name": "REMOTE",
          "isVariadic": true,
          "template": "filepaths"
        },
        {
          "name": "LOCAL"
        }
      ]
    },
    {
      "name": "forward",
      "description": "Forward connection",
      "options": [
        {
          "names": [
            "--list"
          ],
          "description": "List all forward socket connections"
        },
        {
          "names": [
            "--remove"
          ],
          "description": "Remove specific forward socket connection",
          "args": [
            {
              "name": "LOCAL"
            }
          ]
        },
        {
          "names": [
            "--remove-all"
          ],
          "description": "Remove all forward socket connections"
        },
        {
          "names": [
            "--no-rebind"
          ],
          "description": "Reversal fails if the specified socket is already bound through a previous reverse command"
        }
      ],
      "args": [
        {
          "name": "LOCAL -> port|domain|device|pid",
          "suggestions": [
            "tcp",
            "localabstract",
            "localreserved",
            "localfilesystem",
            "dev",
            "jdwp",
            "acceptfd"
          ]
        },
        {
          "name": "REMOTE -> port|domain|device|pid",
          "suggestions": [
            "tcp",
            "localabstract",
            "localreserved",
            "localfilesystem",
            "dev",
            "jdwp",
            "acceptfd"
          ]
        }
      ]
    },
    {
      "name": "reverse",
      "description": "Reverse connection",
      "options": [
        {
          "names": [
            "--list"
          ],
          "description": "List all reverse socket connections from device"
        },
        {
          "names": [
            "--remove"
          ],
          "description": "Remove specific reverse socket connection",
          "args": [
            {
              "name": "REMOTE"
            }
          ]
        },
        {
          "names": [
            "--remove-all"
          ],
          "description": "Remove all reverse socket connections from device"
        },
        {
          "names": [
            "--no-rebind"
          ],
          "description": "Reversal fails if the specified socket is already bound through a previous reverse command"
        }
      ],
      "args": [
        {
          "name": "REMOTE -> port|domain|device|pid",
          "suggestions": [
            "tcp",
            "localabstract",
            "localreserved",
            "localfilesystem"
          ]
        },
        {
          "name": "LOCAL -> port|domain|device|pid",
          "suggestions": [
            "tcp",
            "localabstract",
            "localreserved",
            "localfilesystem"
          ]
        }
      ]
    }
  ]
}
