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:
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):