From a59e58643b311589c1819efa6a66b4b59d7eccb3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Jul 2026 20:06:35 +0000 Subject: [PATCH 1/2] Initial plan From 897f06180b51dfb7f8bf2a2c15108b4cffd927c7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 13 Jul 2026 20:39:12 +0000 Subject: [PATCH 2/2] Report missing Fast Deployment package Co-authored-by: simonrozsival <374616+simonrozsival@users.noreply.github.com> --- .../Tasks/FastDeploy.cs | 11 ++++++++++- .../DebuggingTasksTests.cs | 15 +++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Debugging.Tasks/Tasks/FastDeploy.cs b/src/Xamarin.Android.Build.Debugging.Tasks/Tasks/FastDeploy.cs index 937739f6759..f7687fb1a5e 100644 --- a/src/Xamarin.Android.Build.Debugging.Tasks/Tasks/FastDeploy.cs +++ b/src/Xamarin.Android.Build.Debugging.Tasks/Tasks/FastDeploy.cs @@ -334,7 +334,11 @@ public async Task RunInstall () return; } if (!await IsPackageInstalled (PackageName)) { - LogDiagnostic ($"`pm path {PackageName}` still reports no package after reinstall; continuing — the run-as probe will surface the failure."); + LogDiagnostic ($"`pm path {PackageName}` still reports no package after reinstall."); + LogDiagnosticDataError ("XA0132", Resources.XA0132_PackageNotInstalled); + PrintDiagnostics (); + LogCodedError ("XA0132", Resources.XA0132_PackageNotInstalled); + return; } } @@ -593,6 +597,11 @@ async Task IsPackageInstalled (string packageName) args.Add (packageName); string output = await Device.RunShellCommand (CancellationToken, args.ToArray ()); LogDiagnostic ($"`pm path {packageName}` returned: {(string.IsNullOrWhiteSpace (output) ? "" : output.Trim ())}"); + return IsPackageInstalledOutput (output); + } + + internal static bool IsPackageInstalledOutput (string output) + { return !string.IsNullOrWhiteSpace (output) && output.IndexOf ("package:", StringComparison.OrdinalIgnoreCase) >= 0; } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs index 4f432db926b..8f7d5ede5c5 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs @@ -211,5 +211,20 @@ public void IsTransientRunAsStatRace_ReturnsFalseForNonTransientOutput (string o Assert.IsFalse (FastDeploy.IsTransientRunAsStatRace (output), $"Expected no transient-race detection for: {output}"); } + + [TestCase ("package:/data/app/~~hash/com.example.app-base/base.apk")] + [TestCase ("package:/data/app/~~hash/com.example.app-base/base.apk\npackage:/data/app/~~hash/com.example.app-split/split_config.en.apk")] + public void IsPackageInstalledOutput_ReturnsTrueForPackagePaths (string output) + { + Assert.IsTrue (FastDeploy.IsPackageInstalledOutput (output)); + } + + [TestCase (null)] + [TestCase ("")] + [TestCase ("Error: package com.example.app was not found")] + public void IsPackageInstalledOutput_ReturnsFalseWithoutPackagePath (string output) + { + Assert.IsFalse (FastDeploy.IsPackageInstalledOutput (output)); + } } }