From: Egor Bogatov Date: Tue, 20 Oct 2020 06:46:15 +0000 (+0300) Subject: add activity support for android sample (#43504) X-Git-Tag: submit/tizen/20210909.063632~5015 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d701804307f16e855a8c48a7143040dd474154f1;p=platform%2Fupstream%2Fdotnet%2Fruntime.git add activity support for android sample (#43504) --- diff --git a/src/mono/netcore/sample/Android/AndroidSampleApp.csproj b/src/mono/netcore/sample/Android/AndroidSampleApp.csproj index 3eddf9f..ca078c2 100644 --- a/src/mono/netcore/sample/Android/AndroidSampleApp.csproj +++ b/src/mono/netcore/sample/Android/AndroidSampleApp.csproj @@ -56,7 +56,8 @@ - + + diff --git a/src/mono/netcore/sample/Android/Makefile b/src/mono/netcore/sample/Android/Makefile index 05ffeb2..02aab8f 100644 --- a/src/mono/netcore/sample/Android/Makefile +++ b/src/mono/netcore/sample/Android/Makefile @@ -12,7 +12,8 @@ run: /p:TargetArchitecture=$(MONO_ARCH) \ /p:TargetOS=Android \ /p:Configuration=$(MONO_CONFIG) \ - /p:DeployAndRun=true + /p:DeployAndRun=true \ + /p:RunActivity=false clean: rm -rf ../../../../../artifacts/bin/AndroidSampleApp diff --git a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs index 919cf0a..5231251 100644 --- a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs +++ b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs @@ -180,7 +180,8 @@ public class ApkBuilder string packageId = $"net.dot.{ProjectName}"; File.WriteAllText(Path.Combine(javaSrcFolder, "MainActivity.java"), - Utils.GetEmbeddedResource("MainActivity.java")); + Utils.GetEmbeddedResource("MainActivity.java") + .Replace("%EntryPointLibName%", Path.GetFileName(entryPointLib))); string monoRunner = Utils.GetEmbeddedResource("MonoRunner.java") .Replace("%EntryPointLibName%", Path.GetFileName(entryPointLib)); diff --git a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/MainActivity.java b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/MainActivity.java index e864edc..e84eec3 100644 --- a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/MainActivity.java +++ b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/MainActivity.java @@ -3,9 +3,13 @@ package net.dot; -import android.app.AlertDialog; import android.app.Activity; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.graphics.Color; public class MainActivity extends Activity { @@ -14,8 +18,35 @@ public class MainActivity extends Activity { super.onCreate(savedInstanceState); - AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); - dlgAlert.setMessage("Use `adb shell am instrument -w " + getApplicationContext().getPackageName() + "net.dot.MonoRunner` to run the tests."); - dlgAlert.create().show(); + final String entryPointLibName = "%EntryPointLibName%"; + final TextView textView = new TextView(this); + textView.setTextSize(20); + + RelativeLayout rootLayout = new RelativeLayout(this); + RelativeLayout.LayoutParams tvLayout = + new RelativeLayout.LayoutParams( + RelativeLayout.LayoutParams.WRAP_CONTENT, + RelativeLayout.LayoutParams.WRAP_CONTENT); + + tvLayout.addRule(RelativeLayout.CENTER_HORIZONTAL); + tvLayout.addRule(RelativeLayout.CENTER_VERTICAL); + rootLayout.addView(textView, tvLayout); + setContentView(rootLayout); + + if (entryPointLibName == "" || entryPointLibName.startsWith("%")) { + textView.setText("ERROR: EntryPointLibName was not set."); + return; + } else { + textView.setText("Running " + entryPointLibName + "..."); + } + + final Activity ctx = this; + new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { + @Override + public void run() { + int retcode = MonoRunner.initialize(entryPointLibName, ctx); + textView.setText("Mono Runtime returned: " + retcode); + } + }, 1000); } } diff --git a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/MonoRunner.java b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/MonoRunner.java index 1181052..b22be8c 100644 --- a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/MonoRunner.java +++ b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/MonoRunner.java @@ -27,13 +27,12 @@ import java.util.zip.ZipInputStream; public class MonoRunner extends Instrumentation { - static MonoRunner inst; - static String entryPointLibName = "%EntryPointLibName%"; - static { System.loadLibrary("monodroid"); } + static String entryPointLibName = "%EntryPointLibName%"; + @Override public void onCreate(Bundle arguments) { if (arguments != null) { @@ -47,42 +46,46 @@ public class MonoRunner extends Instrumentation start(); } - @Override - public void onStart() { - super.onStart(); + private static String getDocsDir(Context ctx) { + File docsPath = ctx.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS); + if (docsPath == null) { + docsPath = ctx.getCacheDir(); + } + return docsPath.getAbsolutePath(); + } - MonoRunner.inst = this; - Context context = getContext(); + public static int initialize(String entryPointLibName, Context context) { String filesDir = context.getFilesDir().getAbsolutePath(); String cacheDir = context.getCacheDir().getAbsolutePath(); - File docsPath = context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS); - if (docsPath == null) { - docsPath = context.getCacheDir(); - } - String docsDir = docsPath.getAbsolutePath(); + String docsDir = getDocsDir(context); // unzip libs and test files to filesDir unzipAssets(context, filesDir, "assets.zip"); + Log.i("DOTNET", "initRuntime, entryPointLibName=" + entryPointLibName); + return initRuntime(filesDir, cacheDir, docsDir, entryPointLibName); + } + + @Override + public void onStart() { + super.onStart(); + if (entryPointLibName == "") { Log.e("DOTNET", "Missing entryPointLibName argument, pass '-e entryPointLibName ' to adb to specify which program to run."); finish(1, null); return; } - - Log.i("DOTNET", "initRuntime"); - int retcode = initRuntime(filesDir, cacheDir, docsDir, entryPointLibName); + int retcode = initialize(entryPointLibName, getContext()); runOnMainSync(new Runnable() { public void run() { Bundle result = new Bundle(); result.putInt("return-code", retcode); // Xharness cli expects "test-results-path" with test results - File testResults = new File(docsDir + "/testResults.xml"); + File testResults = new File(getDocsDir(getContext()) + "/testResults.xml"); if (testResults.exists()) { result.putString("test-results-path", testResults.getAbsolutePath()); } - finish(retcode, result); } }); @@ -122,5 +125,5 @@ public class MonoRunner extends Instrumentation } } - native int initRuntime(String libsDir, String cacheDir, String docsDir, String entryPointLibName); + static native int initRuntime(String libsDir, String cacheDir, String docsDir, String entryPointLibName); }