We want `mach run` for Android to be wildly different than `mach run` for Desktop. But right now, mach really doesn't support two different implementations of the same underlying named command. The avenues that might support different implementations, mostly run through `conditions`. `conditions` were added to mach commands in Bug 901972, and never really anticipated this use case: commands are keyed by name condition evaluation is delayed until dispatch-time. In order to have different commands with the same name, and have full support for `--help`, command matching, suggestions, etc, we really need conditions to evaluate at parse-time. Indeed, since Bug 901972 landed, we've moved context creation earlier in the dispatch flow and hacked in things that look like parse-time conditions (see Bug 1291335 and Bug 1305695). This approach is not the prettiest, but it handles this narrow use-case -- making `mach run` and `mach install` different on Android -- without much code churn. Differential Revision: https://phabricator.services.mozilla.com/D18290
==== mach ==== Mach (German for *do*) is a generic command dispatcher for the command line. To use mach, you install the mach core (a Python package), create an executable *driver* script (named whatever you want), and write mach commands. When the *driver* is executed, mach dispatches to the requested command handler automatically. To learn more, read the docs in ``docs/``.