Add NativeMainSource alternative to Android Sample App (#44076)
authorMitchell Hwang <mitchhwang1418@gmail.com>
Mon, 2 Nov 2020 17:44:46 +0000 (12:44 -0500)
committerGitHub <noreply@github.com>
Mon, 2 Nov 2020 17:44:46 +0000 (12:44 -0500)
* Add NativeMainSource alternative to Android Sample

* Move nativeMainSource from parameter to property

Co-authored-by: Mitchell Hwang <mitchell.hwang@microsoft.com>
tools-local/tasks/mobile.tasks/AndroidAppBuilder/AndroidAppBuilder.cs
tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs
tools-local/tasks/mobile.tasks/AppleAppBuilder/AppleAppBuilder.cs

index d7b3c0a..69a976d 100644 (file)
@@ -39,6 +39,12 @@ public class AndroidAppBuilderTask : Task
 
     public bool StripDebugSymbols { get; set; }
 
+    /// <summary>
+    /// Path to a custom MainActivity.java with custom UI
+    /// A default one is used if it's not set
+    /// </summary>
+    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;
index 5231251..6791663 100644 (file)
@@ -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
index 744b296..0743f79 100644 (file)
@@ -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);
                 }
             }
         }