diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs
index d54902cb4ca..4e3a93f3b2f 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs
@@ -213,6 +213,56 @@ public void OverlayManifestTest ([Values] AndroidRuntime runtime)
}
}
+ [Test]
+ public void OverlayManifestIncrementalBuildTest ([Values] AndroidRuntime runtime)
+ {
+ const bool isRelease = true;
+ if (IgnoreUnsupportedConfiguration (runtime, release: isRelease)) {
+ return;
+ }
+ var proj = new XamarinAndroidApplicationProject () {
+ IsRelease = isRelease,
+ ManifestMerger = "manifestmerger.jar",
+ };
+ proj.SetRuntime (runtime);
+ proj.AndroidManifest = @"
+
+
+
+";
+ var overlay = new BuildItem ("AndroidManifestOverlay", "ManifestOverlay.xml") {
+ TextContent = () => @"
+
+
+
+"
+ };
+ proj.OtherBuildItems.Add (overlay);
+ using (var b = CreateApkBuilder (cleanupAfterSuccessfulBuild: false, cleanupOnDispose: false)) {
+ Assert.IsTrue (b.Build (proj), "First build should have succeeded.");
+ var text = b.Output.GetIntermediaryAsText ("android/AndroidManifest.xml");
+ StringAssert.Contains ("android.permission.CAMERA", text, "Merged manifest should contain the initial overlay permission.");
+ StringAssert.DoesNotContain ("android.permission.RECORD_AUDIO", text, "Merged manifest should not contain the updated overlay permission yet.");
+
+ Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate: true, saveProject: false), "Second build should have succeeded.");
+ b.Output.AssertTargetIsSkipped ("_ManifestMerger");
+
+ overlay.TextContent = () => @"
+
+
+
+
+";
+ proj.Touch ("ManifestOverlay.xml");
+
+ Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate: true, saveProject: false), "Third build should have succeeded.");
+ b.Output.AssertTargetIsNotSkipped ("_ManifestMerger");
+
+ text = b.Output.GetIntermediaryAsText ("android/AndroidManifest.xml");
+ StringAssert.Contains ("android.permission.RECORD_AUDIO", text, "Merged manifest should include permissions from the updated overlay.");
+ }
+ }
+
[Test]
public void RemovePermissionTest ([Values] AndroidRuntime runtime)
{
diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
index 84e1a46857c..c2527d1954e 100644
--- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
+++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
@@ -1495,7 +1495,7 @@ because xbuild doesn't support framework reference assemblies.