From f471fa41169f86a8216fd02aa32ca7ded4fb258a Mon Sep 17 00:00:00 2001 From: Jo Shields Date: Tue, 21 Sep 2021 13:58:39 -0400 Subject: [PATCH] Work around for forbidden "Roslyn4.0" in test name on Android (#59263) (#59281) Android apk names must be valid Java class names, and It is forbidden in Java for a class name component to have a leading numeric digit. So whilst "net.dot.foo3_1" is legal, "net.dot.foo3.1" is illegal. Use a Regex to detect and rewrite all cases of this in AndroidAppBuilder --- src/libraries/tests.proj | 4 ++++ src/tasks/AndroidAppBuilder/ApkBuilder.cs | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 5b42461..69f0e7b 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -141,6 +141,10 @@ + + + + diff --git a/src/tasks/AndroidAppBuilder/ApkBuilder.cs b/src/tasks/AndroidAppBuilder/ApkBuilder.cs index c692882..84d3490 100644 --- a/src/tasks/AndroidAppBuilder/ApkBuilder.cs +++ b/src/tasks/AndroidAppBuilder/ApkBuilder.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; @@ -358,6 +359,10 @@ public class ApkBuilder string javaActivityPath = Path.Combine(javaSrcFolder, "MainActivity.java"); string monoRunnerPath = Path.Combine(javaSrcFolder, "MonoRunner.java"); + Regex checkNumerics = new Regex(@"\.(\d)"); + if (!string.IsNullOrEmpty(ProjectName) && checkNumerics.IsMatch(ProjectName)) + ProjectName = checkNumerics.Replace(ProjectName, @"_$1"); + string packageId = $"net.dot.{ProjectName}"; File.WriteAllText(javaActivityPath, -- 2.7.4