Add gn support for generating mojo_shell_apk

BUG=
R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/674013002
diff --git a/mojo/services/native_viewport/BUILD.gn b/mojo/services/native_viewport/BUILD.gn
index ed428c4..0935818 100644
--- a/mojo/services/native_viewport/BUILD.gn
+++ b/mojo/services/native_viewport/BUILD.gn
@@ -4,10 +4,25 @@
 
 import("//build/config/ui.gni")
 
-if (!is_android) {
+if (is_android) {
+  import("//build/config/android/config.gni")
+  import("//build/config/android/rules.gni")
+
+  android_library("native_viewport_java") {
+    java_files = [
+      "android/src/org/chromium/mojo/PlatformViewportAndroid.java",
+    ]
+
+    deps = [
+      "//base:base_java",
+    ]
+  }
+} else {
   shared_library("native_viewport") {
     output_name = "native_viewport_service"
 
+    sources = [ "main.cc" ]
+
     deps = [
       ":lib",
       "//base",
@@ -18,12 +33,34 @@
       "//mojo/services/public/cpp/native_viewport:args",
       "//ui/gl",
     ]
-
-    sources = [ "main.cc" ]
   }
 }
 
 source_set("lib") {
+  sources = [
+    "gpu_impl.cc",
+    "gpu_impl.h",
+    "native_viewport_impl.cc",
+    "native_viewport_impl.h",
+    "platform_viewport.h",
+    "platform_viewport_android.cc",
+    "platform_viewport_android.h",
+    "platform_viewport_mac.mm",
+    "platform_viewport_headless.cc",
+    "platform_viewport_headless.h",
+    "platform_viewport_win.cc",
+    "viewport_surface.cc",
+    "viewport_surface.h",
+  ]
+
+  if (is_ios) {
+    sources += [ "platform_viewport_stub.cc" ]
+  }
+
+  if (use_ozone) {
+    sources += [ "platform_viewport_ozone.cc" ]
+  }
+
   deps = [
     "//base",
     "//cc/surfaces",
@@ -47,39 +84,16 @@
     "//ui/platform_window",
   ]
 
-  sources = [
-    "gpu_impl.cc",
-    "gpu_impl.h",
-    "native_viewport_impl.cc",
-    "native_viewport_impl.h",
-    "platform_viewport.h",
-    "platform_viewport_android.cc",
-    "platform_viewport_android.h",
-    "platform_viewport_mac.mm",
-    "platform_viewport_headless.cc",
-    "platform_viewport_headless.h",
-    "platform_viewport_win.cc",
-    "viewport_surface.cc",
-    "viewport_surface.h",
-  ]
-
-  if (is_ios) {
-    sources += [ "platform_viewport_stub.cc" ]
-  }
-
   if (is_android) {
     deps += [ "//mojo:jni_headers" ]
   }
 
   if (use_x11) {
     sources += [ "platform_viewport_x11.cc" ]
+
     deps += [
       "//ui/events/platform/x11",
       "//ui/platform_window/x11",
     ]
   }
-
-  if (use_ozone) {
-    sources += [ "platform_viewport_ozone.cc" ]
-  }
 }
diff --git a/mojo/shell/BUILD.gn b/mojo/shell/BUILD.gn
index 491dd17..1a09074 100644
--- a/mojo/shell/BUILD.gn
+++ b/mojo/shell/BUILD.gn
@@ -6,10 +6,19 @@
 import("//mojo/public/mojo.gni")
 import("//mojo/public/tools/bindings/mojom.gni")
 
+if (is_android) {
+  import("//build/config/android/config.gni")
+  import("//build/config/android/rules.gni")
+}
+
 if (!use_prebuilt_mojo_shell) {
 
 # GYP version: mojo/mojo.gyp:mojo_shell
 executable("mojo_shell") {
+  sources = [
+    "desktop/mojo_main.cc"
+  ]
+
   deps = [
     ":lib",
     "//base",
@@ -20,33 +29,12 @@
   if (is_component_build) {
     deps += ["//ui/gl"]
   }
-
-  sources = [
-    "desktop/mojo_main.cc"
-  ]
 }
 
 }  # !use_prebuilt_mojo_shell
 
 # GYP version: mojo/mojo.gyp:mojo_shell_lib
 source_set("lib") {
-  deps = [
-    ":app_child_process_bindings",
-    ":external_application_registrar_bindings",
-    ":external_service_bindings",
-    "//base",
-    "//base/third_party/dynamic_annotations",
-    "//base:base_static",
-    "//mojo/application",
-    "//mojo/application_manager",
-    "//mojo/common",
-    "//mojo/edk/system",
-    "//mojo/gles2",
-    "//mojo/public/interfaces/application",
-    "//mojo/services/public/interfaces/network",
-    "//mojo/spy",
-  ]
-
   sources = [
     "app_child_process.cc",
     "app_child_process.h",
@@ -86,15 +74,91 @@
     "ui_application_loader_android.h",
   ]
 
+  deps = [
+    ":app_child_process_bindings",
+    ":external_application_registrar_bindings",
+    ":external_service_bindings",
+    "//base",
+    "//base/third_party/dynamic_annotations",
+    "//base:base_static",
+    "//mojo/application",
+    "//mojo/application_manager",
+    "//mojo/common",
+    "//mojo/edk/system",
+    "//mojo/gles2",
+    "//mojo/public/interfaces/application",
+    "//mojo/services/public/interfaces/network",
+    "//mojo/spy",
+  ]
+
   if (is_android) {
-    deps += [
-      "//mojo/services/native_viewport:lib",
-      "//mojo/services/network:lib",
-    ]
     sources += [
       "network_application_loader.cc",
       "network_application_loader.h",
     ]
+
+    deps += [
+      "//mojo/services/native_viewport:lib",
+      "//mojo/services/network:lib",
+    ]
+  }
+}
+
+if (is_android) {
+  generate_jni("jni_headers") {
+    sources = [
+      "android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java",
+    ]
+    jni_package = "mojo"
+  }
+
+  android_library("java") {
+    java_files = [
+      "android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java",
+      "android/apk/src/org/chromium/mojo_shell_apk/MojoShellActivity.java",
+      "android/apk/src/org/chromium/mojo_shell_apk/MojoShellApplication.java",
+    ]
+
+    deps = [
+      "//base:base_java",
+      "//net/android:net_java",
+    ]
+  }
+
+  android_resources("resources") {
+    resource_dirs = [ "android/apk/res" ]
+    custom_package = "org.chromium.mojo_shell_apk"
+  }
+
+  shared_library("libmojo_shell") {
+    sources = [
+      "android/library_loader.cc",
+      "android/mojo_main.cc",
+      "android/mojo_main.h",
+    ]
+    deps = [
+      ":jni_headers",
+      ":lib",
+      "//ui/gl",
+    ]
+  }
+
+  android_apk("mojo_shell_apk") {
+    apk_name = "MojoShell"
+
+    android_manifest = "android/apk/AndroidManifest.xml"
+
+    native_libs = [
+      "libmojo_shell.so"
+    ]
+
+    deps = [
+      ":java",
+      ":libmojo_shell",
+      ":resources",
+      "//mojo/services/native_viewport:native_viewport_java",
+    ]
+
   }
 }
 
@@ -132,6 +196,17 @@
 
 # GYP version: mojo/mojo.gyp:mojo_shell_tests
 test("mojo_shell_tests") {
+  sources = [
+    "child_process_host_unittest.cc",
+    "dynamic_application_loader_unittest.cc",
+    "in_process_dynamic_service_runner_unittest.cc",
+    "mojo_url_resolver_unittest.cc",
+    "shell_test_base.cc",
+    "shell_test_base.h",
+    "shell_test_base_unittest.cc",
+    "shell_test_main.cc",
+  ]
+
   deps = [
     ":lib",
     "//base",
@@ -152,17 +227,6 @@
     "//mojo/services/test_service:test_request_tracker_app",
   ]
 
-  sources = [
-    "child_process_host_unittest.cc",
-    "dynamic_application_loader_unittest.cc",
-    "in_process_dynamic_service_runner_unittest.cc",
-    "mojo_url_resolver_unittest.cc",
-    "shell_test_base.cc",
-    "shell_test_base.h",
-    "shell_test_base_unittest.cc",
-    "shell_test_main.cc",
-  ]
-
   if (is_android) {
     deps += [
       # TODO(GYP):
@@ -186,6 +250,12 @@
 
 # GYP version: mojo/mojo.gyp:external_application_tests
 test("mojo_external_application_tests") {
+  sources = [
+    "incoming_connection_listener_unittest.cc",
+    "external_application_listener_unittest.cc",
+    "external_application_test_main.cc",
+  ]
+
   deps = [
     ":lib",
     ":external_application_registrar_connection",
@@ -199,10 +269,4 @@
     "//mojo/edk/system",
     "//mojo/environment:chromium",
   ]
-
-  sources = [
-    "incoming_connection_listener_unittest.cc",
-    "external_application_listener_unittest.cc",
-    "external_application_test_main.cc",
-  ]
 }