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 2435a5bcda8..c00e75d30c0 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 @@ -134,10 +134,9 @@ public void CheckElementReOrdering ([Values (true, false)] bool useAapt2) }; proj.MainActivity = ScreenOrientationActivity; proj.AndroidUseAapt2 = useAapt2; - var directory = $"temp/CheckElementReOrdering_{useAapt2}"; - using (var builder = CreateApkBuilder (directory)) { + using (var builder = CreateApkBuilder ()) { proj.AndroidManifest = ElementOrderManifest; - Assert.IsTrue (builder.Build (proj), "Build should have succeeded"); + Assert.IsTrue (builder.Build (proj), "first build should have succeeded"); var manifestFile = Path.Combine (Root, builder.ProjectDirectory, proj.IntermediateOutputPath, "android", "AndroidManifest.xml"); XDocument doc = XDocument.Load (manifestFile); var ns = doc.Root.GetNamespaceOfPrefix ("android"); @@ -152,6 +151,11 @@ public void CheckElementReOrdering ([Values (true, false)] bool useAapt2) AssertAttribute (action, ns + "name", "android.intent.action.MAIN"); var category = GetElement (intent_filter, "category"); AssertAttribute (category, ns + "name", "android.intent.category.LAUNCHER"); + + // Add Exported=true and build again + proj.MainActivity = proj.MainActivity.Replace ("MainLauncher = true,", "MainLauncher = true, Exported = true,"); + proj.Touch ("MainActivity.cs"); + Assert.IsTrue (builder.Build (proj), "second build should have succeeded"); } static XElement GetElement (XContainer parent, XName name) diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs index b1b07d80df9..16cd4a86773 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocument.cs @@ -798,7 +798,13 @@ void AddLauncherIntentElements (XElement activity) return; var filter = new XElement ("intent-filter"); - activity.Add (new XAttribute (androidNs + "exported", "true")); + + // Add android:exported="true" if not already present + XName exported = androidNs + "exported"; + if (activity.Attribute (exported) == null) { + activity.Add (new XAttribute (exported, "true")); + } + activity.AddFirst (filter); foreach (KeyValuePair e in LauncherIntentElements) { if (!filter.Elements (e.Key).Any (x => ((string) x.Attribute (attName)) == e.Value))