From 63a877b34923dbc575621d07395279373ff90fd9 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Mon, 2 Nov 2020 12:44:46 -0500 Subject: [PATCH] Add NativeMainSource alternative to Android Sample App (#44076) * Add NativeMainSource alternative to Android Sample * Move nativeMainSource from parameter to property Co-authored-by: Mitchell Hwang --- .../AndroidAppBuilder/AndroidAppBuilder.cs | 7 +++++++ .../mobile.tasks/AndroidAppBuilder/ApkBuilder.cs | 19 ++++++++++++++----- .../mobile.tasks/AppleAppBuilder/AppleAppBuilder.cs | 4 +--- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/AndroidAppBuilder.cs b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/AndroidAppBuilder.cs index d7b3c0a..69a976d 100644 --- a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/AndroidAppBuilder.cs +++ b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/AndroidAppBuilder.cs @@ -39,6 +39,12 @@ public class AndroidAppBuilderTask : Task public bool StripDebugSymbols { get; set; } + /// + /// Path to a custom MainActivity.java with custom UI + /// A default one is used if it's not set + /// + public string? NativeMainSource { get; set; } + [Output] public string ApkBundlePath { get; set; } = ""!; @@ -60,6 +66,7 @@ public class AndroidAppBuilderTask : Task apkBuilder.BuildApiLevel = BuildApiLevel; apkBuilder.BuildToolsVersion = BuildToolsVersion; apkBuilder.StripDebugSymbols = StripDebugSymbols; + apkBuilder.NativeMainSource = NativeMainSource; (ApkBundlePath, ApkPackageId) = apkBuilder.BuildApk(SourceDir, abi, MainLibraryFileName, MonoRuntimeHeaders); return true; diff --git a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs index 5231251..6791663 100644 --- a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs +++ b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs @@ -18,9 +18,13 @@ public class ApkBuilder public string? BuildToolsVersion { get; set; } public string? OutputDir { get; set; } public bool StripDebugSymbols { get; set; } + public string? NativeMainSource { get; set; } public (string apk, string packageId) BuildApk( - string sourceDir, string abi, string entryPointLib, string monoRuntimeHeaders) + string sourceDir, + string abi, + string entryPointLib, + string monoRuntimeHeaders) { if (!Directory.Exists(sourceDir)) throw new ArgumentException($"sourceDir='{sourceDir}' is empty or doesn't exist"); @@ -177,15 +181,20 @@ public class ApkBuilder string javaSrcFolder = Path.Combine(OutputDir, "src", "net", "dot"); Directory.CreateDirectory(javaSrcFolder); + string javaActivityPath = Path.Combine(javaSrcFolder, "MainActivity.java"); + string monoRunnerPath = Path.Combine(javaSrcFolder, "MonoRunner.java"); + string packageId = $"net.dot.{ProjectName}"; - File.WriteAllText(Path.Combine(javaSrcFolder, "MainActivity.java"), + File.WriteAllText(javaActivityPath, Utils.GetEmbeddedResource("MainActivity.java") .Replace("%EntryPointLibName%", Path.GetFileName(entryPointLib))); + if (!string.IsNullOrEmpty(NativeMainSource)) + File.Copy(NativeMainSource, javaActivityPath, true); string monoRunner = Utils.GetEmbeddedResource("MonoRunner.java") .Replace("%EntryPointLibName%", Path.GetFileName(entryPointLib)); - File.WriteAllText(Path.Combine(javaSrcFolder, "MonoRunner.java"), monoRunner); + File.WriteAllText(monoRunnerPath, monoRunner); File.WriteAllText(Path.Combine(OutputDir, "AndroidManifest.xml"), Utils.GetEmbeddedResource("AndroidManifest.xml") @@ -193,8 +202,8 @@ public class ApkBuilder .Replace("%MinSdkLevel%", MinApiLevel)); string javaCompilerArgs = $"-d obj -classpath src -bootclasspath {androidJar} -source 1.8 -target 1.8 "; - Utils.RunProcess(javac, javaCompilerArgs + Path.Combine(javaSrcFolder, "MainActivity.java"), workingDir: OutputDir); - Utils.RunProcess(javac, javaCompilerArgs + Path.Combine(javaSrcFolder, "MonoRunner.java"), workingDir: OutputDir); + Utils.RunProcess(javac, javaCompilerArgs + javaActivityPath, workingDir: OutputDir); + Utils.RunProcess(javac, javaCompilerArgs + monoRunnerPath, workingDir: OutputDir); Utils.RunProcess(dx, "--dex --output=classes.dex obj", workingDir: OutputDir); // 3. Generate APK diff --git a/tools-local/tasks/mobile.tasks/AppleAppBuilder/AppleAppBuilder.cs b/tools-local/tasks/mobile.tasks/AppleAppBuilder/AppleAppBuilder.cs index 744b296..0743f79 100644 --- a/tools-local/tasks/mobile.tasks/AppleAppBuilder/AppleAppBuilder.cs +++ b/tools-local/tasks/mobile.tasks/AppleAppBuilder/AppleAppBuilder.cs @@ -173,9 +173,7 @@ public class AppleAppBuilderTask : Task } else { - AppBundlePath = Xcode.BuildAppBundle( - Path.Combine(binDir, ProjectName, ProjectName + ".xcodeproj"), - Arch, Optimized, DevTeamProvisioning); + AppBundlePath = Xcode.BuildAppBundle(XcodeProjectPath, Arch, Optimized, DevTeamProvisioning); } } } -- 2.7.4