diff --git a/Documentation/docs-mobile/building-apps/build-properties.md b/Documentation/docs-mobile/building-apps/build-properties.md index 66f8774e70a..81e67edfc6b 100644 --- a/Documentation/docs-mobile/building-apps/build-properties.md +++ b/Documentation/docs-mobile/building-apps/build-properties.md @@ -1535,6 +1535,67 @@ If `DebugType` is not set or is the empty string, then the `DebugSymbols` property controls whether or not the Application is debuggable. +## DiagnosticAddress + +A value provided by `dotnet-dsrouter` such as `127.0.0.1`, the IP +address component of `$(DiagnosticConfiguration)` or `$DOTNET_DiagnosticPorts`. + +Implicitly enables the Mono diagnostic component, meaning that +`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`. + +Defaults to `127.0.0.1`. + +## DiagnosticConfiguration + +A value provided by `dotnet-dsrouter` for `$DOTNET_DiagnosticPorts` such as: + +* `127.0.0.1:9000,suspend,connect` +* `127.0.0.1:9000,nosuspend,connect` + +Note that the `,` character will need to be escaped with `%2c` if +passed in command-line to `dotnet build`: + +```dotnetcli +dotnet build -c Release -p:DiagnosticConfiguration=127.0.0.1:9000%2csuspend%2cconnect +``` + +This will automatically set the `$DOTNET_DiagnosticPorts` environment +variable packaged inside the application. + +Implicitly enables the Mono diagnostic component, meaning that +`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`. + +## DiagnosticListenMode + +A value provided by `dotnet-dsrouter` such as `connect`, the listening +mode component of `$(DiagnosticConfiguration)` or `$DOTNET_DiagnosticPorts`. + +Implicitly enables the Mono diagnostic component, meaning that +`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`. + +Defaults to `connect`. + +## DiagnosticPort + +A value provided by `dotnet-dsrouter` such as `9000`, the port +component of `$(DiagnosticConfiguration)` or `$DOTNET_DiagnosticPorts`. + +Implicitly enables the Mono diagnostic component, meaning that +`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`. + +Defaults to `9000`. + +## DiagnosticSuspend + +A boolean value provided by `dotnet-dsrouter` such as `true/suspend` +or `false/nosuspend`, a component of `$(DiagnosticConfiguration)` +or `$DOTNET_DiagnosticPorts`. + +Implicitly enables the Mono diagnostic component, meaning that +`$(EnableDiagnostics)`/`$(AndroidEnableProfiler)` is set to `true`. + +Defaults to `false`. + ## EmbedAssembliesIntoApk A boolean property that diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets index c647dc91295..ee627e65d03 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets @@ -72,7 +72,7 @@ properties that determine build ordering. _ConvertCustomView; $(_AfterConvertCustomView); $(AfterGenerateAndroidManifest); - _GenerateEnvironmentFiles; + _ReadAndroidManifest; _CompileJava; _CreateApplicationSharedLibraries; _CompileDex; diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index 7bf14ef1fcb..0adb893fe9e 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -43,8 +43,9 @@ obsolete - $(EnableDiagnostics) - false + $(EnableDiagnostics) + true + false None diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs index aedd58f29e2..cea5d2525d4 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs @@ -1255,21 +1255,30 @@ public void AbiNameInIntermediateOutputPath () } [Test] - public void PackageNamingPolicy ([Values ("LowercaseMD5", "LowercaseCrc64")] string packageNamingPolicy) + [TestCase (true, "LowercaseMD5", "")] + [TestCase (true, "LowercaseCrc64", "")] + [TestCase (false, "LowercaseCrc64", "127.0.0.1:9000,suspend,connect")] + public void EnvironmentVariables (bool useInterpreter, string packageNamingPolicy, string diagnosticConfiguration) { var proj = new XamarinAndroidApplicationProject (); - proj.SetProperty ("UseInterpreter", "true"); - proj.SetProperty ("AndroidPackageNamingPolicy", packageNamingPolicy); + proj.SetProperty ("UseInterpreter", useInterpreter.ToString ()); + if (!string.IsNullOrEmpty (packageNamingPolicy)) + proj.SetProperty ("AndroidPackageNamingPolicy", packageNamingPolicy); + if (!string.IsNullOrEmpty (diagnosticConfiguration)) + proj.SetProperty ("DiagnosticConfiguration", diagnosticConfiguration); proj.SetAndroidSupportedAbis ("armeabi-v7a", "x86"); using (var b = CreateApkBuilder ()) { Assert.IsTrue (b.Build (proj), "build should have succeeded."); var environment = b.Output.GetIntermediaryPath (Path.Combine ("__environment__.txt")); FileAssert.Exists (environment); var values = new List { - $"__XA_PACKAGE_NAMING_POLICY__={packageNamingPolicy}" + $"__XA_PACKAGE_NAMING_POLICY__={packageNamingPolicy}", + "mono.enable_assembly_preload=0", }; - values.Add ("mono.enable_assembly_preload=0"); - values.Add ("DOTNET_MODIFIABLE_ASSEMBLIES=Debug"); + if (useInterpreter) + values.Add ("DOTNET_MODIFIABLE_ASSEMBLIES=Debug"); + if (!string.IsNullOrEmpty (diagnosticConfiguration)) + values.Add ($"DOTNET_DiagnosticPorts={diagnosticConfiguration}"); Assert.AreEqual (string.Join (Environment.NewLine, values), File.ReadAllText (environment).Trim ()); } } diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 5086a918125..9e9479a0486 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -1470,7 +1470,7 @@ because xbuild doesn't support framework reference assemblies. - + <_GenerateJavaStubsInputs Include="@(_AndroidMSBuildAllProjects)" /> <_GenerateJavaStubsInputs Include="$(_ResolvedUserAssembliesHashFile)" /> @@ -1631,11 +1631,12 @@ because xbuild doesn't support framework reference assemblies. - + <_GeneratedAndroidEnvironment Include="__XA_PACKAGE_NAMING_POLICY__=$(AndroidPackageNamingPolicy)" /> <_GeneratedAndroidEnvironment Include="mono.enable_assembly_preload=0" Condition=" '$(AndroidEnablePreloadAssemblies)' != 'True' " /> <_GeneratedAndroidEnvironment Include="DOTNET_MODIFIABLE_ASSEMBLIES=Debug" Condition=" '$(AndroidIncludeDebugSymbols)' == 'true' and '$(AndroidUseInterpreter)' == 'true' " /> + <_GeneratedAndroidEnvironment Include="DOTNET_DiagnosticPorts=$(DiagnosticConfiguration)" Condition=" '$(DiagnosticConfiguration)' != '' " />