diff --git a/Documentation/guides/building-apps/build-items.md b/Documentation/guides/building-apps/build-items.md
index 3905cd51c7f..1c88b2f99bd 100644
--- a/Documentation/guides/building-apps/build-items.md
+++ b/Documentation/guides/building-apps/build-items.md
@@ -370,6 +370,11 @@ Starting in Xamarin.Android 11.3, the following MSBuild metadata is supported:
online documentation. Only one style is currently supported:
`developer.android.com/reference@2020-Nov`.
+Starting in Xamarin.Android 12.3, the following MSBuild metadata is supported:
+
+* `%(DocRootUrl)`: A URL prefix to use in place of all {@docroot}
+ instances in the imported documentation.
+
## LibraryProjectZip
diff --git a/external/Java.Interop b/external/Java.Interop
index d3f0c5c6f63..32635fd67bf 160000
--- a/external/Java.Interop
+++ b/external/Java.Interop
@@ -1 +1 @@
-Subproject commit d3f0c5c6f634380b6156c98f57e98463adf0de52
+Subproject commit 32635fd67bfc74fbb7d0370d1bc75bd13c838b61
diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets
index fbd10e37b7e..115043cdeca 100644
--- a/src/Mono.Android/Mono.Android.targets
+++ b/src/Mono.Android/Mono.Android.targets
@@ -78,6 +78,8 @@
<_Doclink Include="https://developer.android.com/reference" />
<_Doclink Include="--doc-url-style" />
<_Doclink Include="developer.android.com/reference@2020-Nov" />
+ <_Doclink Include="--doc-root-url" />
+ <_Doclink Include="https://developer.android.com/" />
<_AndroidSources Include="$(_AndroidStableSrcDir)\android\**\*.java" />
diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets
index eaed2e525c5..de37de3657f 100644
--- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets
+++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets
@@ -79,6 +79,7 @@ This file is only used by binding projects.
JavadocCopyrightFile="%(_JavaSourceJavadocXml.CopyrightFile)"
JavadocUrlPrefix="%(_JavaSourceJavadocXml.UrlPrefix)"
JavadocUrlStyle="%(_JavaSourceJavadocXml.UrlStyle)"
+ JavadocDocRootUrl="%(_JavaSourceJavadocXml.DocRootUrl)"
JavaMaximumHeapSize="$(JavaMaximumHeapSize)"
JavaOptions="$(JavaOptions)"
JavaSdkDirectory="$(_JavaSdkDirectory)"
diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/JavaSourceUtils.cs b/src/Xamarin.Android.Build.Tasks/Tasks/JavaSourceUtils.cs
index d22ba15b1e2..55dc41f9616 100644
--- a/src/Xamarin.Android.Build.Tasks/Tasks/JavaSourceUtils.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tasks/JavaSourceUtils.cs
@@ -31,6 +31,7 @@ public class JavaSourceUtils : AndroidToolTask
public ITaskItem JavadocCopyrightFile { get; set; }
public string JavadocUrlPrefix { get; set; }
public string JavadocUrlStyle { get; set; }
+ public string JavadocDocRootUrl { get; set; }
public string JavaOptions { get; set; }
@@ -139,11 +140,15 @@ string CreateResponseFile ()
}
if (!string.IsNullOrEmpty (JavadocUrlPrefix)) {
AppendArg (response, "--doc-url-prefix");
- AppendArg (response, Path.GetFullPath (JavadocUrlPrefix));
+ AppendArg (response, JavadocUrlPrefix);
}
if (!string.IsNullOrEmpty (JavadocUrlStyle)) {
- AppendArg (response, "--doc-link-style");
- AppendArg (response, Path.GetFullPath (JavadocUrlStyle));
+ AppendArg (response, "--doc-url-style");
+ AppendArg (response, JavadocUrlStyle);
+ }
+ if (!string.IsNullOrEmpty (JavadocDocRootUrl)) {
+ AppendArg (response, "--doc-root-url");
+ AppendArg (response, JavadocDocRootUrl);
}
foreach (var path in InputFiles) {
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs
index d948cf4f211..07c1c103abc 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs
@@ -470,18 +470,29 @@ public void JavaSourceJar ()
AndroidClassParser = "class-parse",
};
binding.SetProperty ("DocumentationFile", "UnnamedProject.xml");
+ binding.SetProperty ("AndroidJavadocVerbosity", "full");
using (var bindingBuilder = CreateDllBuilder ()) {
binding.Jars.Add (new AndroidItem.EmbeddedJar ("javasourcejartest.jar") {
BinaryContent = () => ResourceData.JavaSourceJarTestJar,
});
+ binding.OtherBuildItems.Add (new BuildItem ("None", "javadoc-copyright.xml") {
+ BinaryContent = () => ResourceData.JavadocCopyright,
+ });
binding.OtherBuildItems.Add (new BuildItem ("JavaSourceJar", "javasourcejartest-sources.jar") {
BinaryContent = () => ResourceData.JavaSourceJarTestSourcesJar,
+ MetadataValues = "CopyrightFile=$(MSBuildThisFileDirectory)javadoc-copyright.xml;" +
+ "UrlPrefix=https://developer.android.com/reference;" +
+ "UrlStyle=developer.android.com/reference@2020-Nov;" +
+ "DocRootUrl=https://developer.android.com",
});
Assert.IsTrue (bindingBuilder.Build (binding), "binding build should have succeeded");
var path = Path.Combine (Root, bindingBuilder.ProjectDirectory, binding.OutputPath, "UnnamedProject.xml");
var xml = File.ReadAllText (path);
Assert.IsTrue (xml.Contains ("name to display."), "param `name` documentation not imported!");
+ Assert.IsTrue (xml.Contains ("Includes a https://developer.android.com/test.html element."), "{@docRoot} value was not replaced!");
+ Assert.IsTrue (xml.Contains (""), "Java documentation URL was not imported!");
+ Assert.IsTrue (xml.Contains ("Android Open Source Project"), "Copyright file was not imported!");
}
}
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-javadoc.jar b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-javadoc.jar
index 4eadc3f4db9..54801d3efb3 100644
Binary files a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-javadoc.jar and b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-javadoc.jar differ
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-sources.jar b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-sources.jar
index 456b53d3525..d6f79a8e348 100644
Binary files a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-sources.jar and b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest-sources.jar differ
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest.jar b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest.jar
index fe7ba83bf2a..3de5e890b7a 100644
Binary files a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest.jar and b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Resources/javasourcejartest.jar differ
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ResourceData.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ResourceData.cs
index fbe1b707ab1..19c2cba2839 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ResourceData.cs
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/ResourceData.cs
@@ -16,6 +16,7 @@ static class ResourceData
static Lazy library1Aar = new Lazy (() => GetResourceData ("library1.aar"));
static Lazy library2Aar = new Lazy (() => GetResourceData ("library2.aar"));
static Lazy apacheHttpClient_cs = new Lazy (() => GetResourceData ("ApacheHttpClient.cs"));
+ static Lazy javadocCopyright = new Lazy (() => GetResourceData ("javadoc-copyright.xml"));
public static byte[] JavaSourceJarTestJar => javaSourceJarTestJar.Value;
public static byte[] JavaSourceJarTestSourcesJar => javaSourceJarTestSourcesJar.Value;
@@ -23,6 +24,7 @@ static class ResourceData
public static byte [] Library1Aar => library1Aar.Value;
public static byte [] Library2Aar => library2Aar.Value;
public static byte [] ApacheHttpClient_cs => apacheHttpClient_cs.Value;
+ public static byte [] JavadocCopyright => javadocCopyright.Value;
static byte[] GetResourceData (string name)
{
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj
index 3509782af29..3bdb1b40f6b 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests.csproj
@@ -61,6 +61,7 @@
%(FileName)%(Extension)
+
diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/java/com/microsoft/android/test/msbuildtest/JavaSourceJarTest.java b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/java/com/microsoft/android/test/msbuildtest/JavaSourceJarTest.java
index 1d42690ced9..a2986fab8bf 100644
--- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/java/com/microsoft/android/test/msbuildtest/JavaSourceJarTest.java
+++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/java/com/microsoft/android/test/msbuildtest/JavaSourceJarTest.java
@@ -6,7 +6,7 @@ public class JavaSourceJarTest
* Returns greeting message.
*
* Returns "Morning, ", "Hello, " or "Evening, " with name argument,
- * depending on the argument hour.
+ * depending on the argument hour. Includes a {@docRoot}test.html element.
*
* @param name name to display.
* @param date time to determine the greeting message.