tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 3db397d760756fdb45e7a23dbe6b9efc5c843636
parent 99ae537386ee60bc0340afd90d1897c21f6ff094
Author: Ted Campbell <tcampbell@mozilla.com>
Date:   Mon, 15 Dec 2025 21:42:30 +0000

Bug 1826803 - Cleanup mach install/run support for Android r=geckoview-reviewers,nalexander

Cleanup the '--app' names for various android builds and add support for
Fenix Nightly/Beta/Release channels. This also updates some of the
'./mach android install-...` commands to support this. A few small cleanups
include removing the Fennec aliases, and cleaning up AAB handling.

Differential Revision: https://phabricator.services.mozilla.com/D276405

Diffstat:
Mmobile/android/mach_commands.py | 44+++++++++++++++++++++++++++++++++-----------
Mtesting/mozbase/mozrunner/mozrunner/devices/android_device.py | 79++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------
2 files changed, 81 insertions(+), 42 deletions(-)

diff --git a/mobile/android/mach_commands.py b/mobile/android/mach_commands.py @@ -270,37 +270,59 @@ def android_install_fenix(command_context, args): return 0 -@SubCommand("android", "install-focus", """Install focus """) +@SubCommand("android", "install-fenix-nightly", """Install fenix Nightly""") @CommandArgument("args", nargs=argparse.REMAINDER) -def android_install_focus(command_context, args): +def android_install_fenix_nightly(command_context, args): gradle( command_context, - ["focus-android:installFocusDebug"] + args, + ["fenix:installNightly"] + args, verbose=True, ) return 0 -@SubCommand( - "android", "install-geckoview-test_runner", """Install geckoview.test_runner """ -) +@SubCommand("android", "install-fenix-beta", """Install fenix Beta""") @CommandArgument("args", nargs=argparse.REMAINDER) -def android_install_geckoview_test_runner(command_context, args): +def android_install_fenix_beta(command_context, args): gradle( command_context, - command_context.substs["GRADLE_ANDROID_INSTALL_GECKOVIEW_TEST_RUNNER_TASKS"] - + args, + ["fenix:installBeta"] + args, verbose=True, ) return 0 -@SubCommand("android", "installFenixRelease", """Install fenix Release""") +@SubCommand("android", "install-fenix-release", """Install fenix Release""") @CommandArgument("args", nargs=argparse.REMAINDER) def android_install_fenix_release(command_context, args): gradle( command_context, - ["-p", "mobile/android/fenix", "installRelease"] + args, + ["fenix:installRelease"] + args, + verbose=True, + ) + return 0 + + +@SubCommand("android", "install-focus", """Install focus """) +@CommandArgument("args", nargs=argparse.REMAINDER) +def android_install_focus(command_context, args): + gradle( + command_context, + ["focus-android:installFocusDebug"] + args, + verbose=True, + ) + return 0 + + +@SubCommand( + "android", "install-geckoview-test_runner", """Install geckoview.test_runner """ +) +@CommandArgument("args", nargs=argparse.REMAINDER) +def android_install_geckoview_test_runner(command_context, args): + gradle( + command_context, + command_context.substs["GRADLE_ANDROID_INSTALL_GECKOVIEW_TEST_RUNNER_TASKS"] + + args, verbose=True, ) return 0 diff --git a/testing/mozbase/mozrunner/mozrunner/devices/android_device.py b/testing/mozbase/mozrunner/mozrunner/devices/android_device.py @@ -291,45 +291,62 @@ def metadata_for_app(app, aab=False): return Android metadata including launch `activity_name`, `package_name`, 'subcommand'. to reduce special-casing throughout the code base""" metadata = namedtuple("metadata", ["activity_name", "package_name", "subcommand"]) - if not app: - app = "org.mozilla.geckoview.test_runner" - package_name = app + package_name = None activity_name = None - subcommand = None + install_apk = None + install_aab = None - if app in {"org.mozilla.fenix.release", "org.mozilla.firefox"}: - package_name = "org.mozilla.firefox" - activity_name = "org.mozilla.firefox.App" - subcommand = "installFenixRelease" - elif app in {"org.mozilla.fenix.nightly", "fenix.nightly"}: - # Likely only works for --no-install. - package_name = "org.mozilla.fenix" - activity_name = "org.mozilla.fenix.App" - elif "fennec" in app or "firefox" in app: - activity_name = "org.mozilla.gecko.BrowserApp" - elif app == "org.mozilla.geckoview.test": - subcommand = "install-geckoview-test" - elif app == "org.mozilla.geckoview.test_runner": + # GeckoView Test Runner (for xpcshell, junit, wpt, mochitest, etc) + if not app or app in {"test_runner", "org.mozilla.geckoview.test_runner"}: + package_name = "org.mozilla.geckoview.test_runner" activity_name = "org.mozilla.geckoview.test_runner.TestRunnerActivity" - subcommand = ( - "install-geckoview-test_runner-aab" - if aab - else "install-geckoview-test_runner" - ) - elif app == "org.mozilla.geckoview_example": + install_apk = "install-geckoview-test_runner" + install_aab = "install-geckoview-test_runner-aab" + + # GeckoView AndroidTest (install only) + elif app in {"geckoview.test", "org.mozilla.geckoview.test"}: + install_apk = "install-geckoview-test" + + # GeckoView Example + elif app in {"geckoview_example", "org.mozilla.geckoview_example"}: + package_name = "org.mozilla.geckoview_example" activity_name = "org.mozilla.geckoview_example.GeckoViewActivity" - subcommand = ( - "install-geckoview_example-aab" if aab else "install-geckoview_example" - ) - elif "fenix" in app: + install_apk = "install-geckoview_example" + install_aab = "install-geckoview_example-aab" + + # Fenix Debug/Nightly/Beta/Release + # NOTE: We target the `IntentReceiverActivity` since that is what is used when + # opening URLs which is often what callers want to do. + elif app in {"fenix", "fenix.debug", "org.mozilla.fenix.debug"}: package_name = "org.mozilla.fenix.debug" activity_name = "org.mozilla.fenix.IntentReceiverActivity" - subcommand = "install-fenix" - elif "focus" in app: + install_apk = "install-fenix" + elif app in {"fenix.nightly", "org.mozilla.fenix"}: + package_name = "org.mozilla.fenix" + activity_name = "org.mozilla.fenix.IntentReceiverActivity" + install_apk = "install-fenix-nightly" + elif app in {"fenix.beta", "org.mozilla.firefox_beta"}: + package_name = "org.mozilla.firefox_beta" + activity_name = "org.mozilla.fenix.IntentReceiverActivity" + install_apk = "install-fenix-beta" + elif app in {"fenix.release", "org.mozilla.firefox"}: + package_name = "org.mozilla.firefox" + activity_name = "org.mozilla.fenix.IntentReceiverActivity" + install_apk = "install-fenix-release" + + # Focus for Android + elif app in {"focus", "focus-android", "focus.debug", "org.mozilla.focus.debug"}: package_name = "org.mozilla.focus.debug" activity_name = "org.mozilla.focus.activity.IntentReceiverActivity" - subcommand = "install-focus" - return metadata(activity_name, package_name, subcommand) + install_apk = "install-focus" + + if aab: + # Error out if we don't know how to use AABs to avoid confusion + if not install_aab: + raise Exception("I don't know how to use AABs for this app") + return metadata(activity_name, package_name, install_aab) + else: + return metadata(activity_name, package_name, install_apk) def get_android_device(build_obj, device_serial=None, verbose=False):