From a82e0f6beb155230f05c7fde06724fbaea3c7b44 Mon Sep 17 00:00:00 2001 From: Matt Perry Date: Thu, 21 Jan 2016 16:55:51 -0500 Subject: [PATCH] Support dynamic registration of mojo services on Android SkyApplication now reads service info from a services.json file bundled with the apk. For each service, it registers a method that invokes connectToService on a named class. This way, third party services can register themselves. There's a corresponding change to flutter_tools to generate this services.json when building an apk that depends on services. --- engine/src/flutter/build/config/android/rules.gni | 14 ++++++++++++-- engine/src/flutter/sky/BUILD.gn | 8 ++++++++ engine/src/flutter/sky/tools/release_engine.py | 4 +++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/engine/src/flutter/build/config/android/rules.gni b/engine/src/flutter/build/config/android/rules.gni index dc6e13607d..c24b789ebc 100644 --- a/engine/src/flutter/build/config/android/rules.gni +++ b/engine/src/flutter/build/config/android/rules.gni @@ -1577,7 +1577,7 @@ template("android_apk") { } final_deps += [ ":$final_dex_target_name" ] - dex("$final_dex_target_name") { + dex("${final_dex_target_name}_jar") { deps = [ ":$build_config_target", ":$java_target", @@ -1588,11 +1588,21 @@ template("android_apk") { inputs = [ _build_config, ] - output = final_dex_path + output = "${final_dex_path}.jar" dex_arg_key = "${_rebased_build_config}:final_dex:dependency_dex_files" args = [ "--inputs=@FileArg($dex_arg_key)" ] } + dex("$final_dex_target_name") { + deps = [ + ":${final_dex_target_name}_jar", + ] + sources = [ + "${final_dex_path}.jar", + ] + output = final_dex_path + } + if (_native_libs != []) { action("${_template_name}__prepare_native") { script = "//build/android/gyp/pack_relocations.py" diff --git a/engine/src/flutter/sky/BUILD.gn b/engine/src/flutter/sky/BUILD.gn index a56be4ea02..9136bd0bca 100644 --- a/engine/src/flutter/sky/BUILD.gn +++ b/engine/src/flutter/sky/BUILD.gn @@ -28,9 +28,17 @@ group("sky") { if (is_android) { deps += [ "//sky/services/activity" ] + + # TODO(mpcomplete): This is temporary until we move GCM out of the engine + # repo. + deps += [ + "//sky/services/gcm:gcm_lib", + "//sky/services/gcm:interfaces_java", + ] } if (!is_android) { deps += [ "//third_party/mesa:osmesa" ] } + } diff --git a/engine/src/flutter/sky/tools/release_engine.py b/engine/src/flutter/sky/tools/release_engine.py index 262c6ddc78..d9dc824f46 100755 --- a/engine/src/flutter/sky/tools/release_engine.py +++ b/engine/src/flutter/sky/tools/release_engine.py @@ -48,8 +48,10 @@ ZIP_ARTIFACTS = { 'icudtl.dat', 'dist/shell/SkyShell.apk', 'dist/shell/flutter.mojo', - 'gen/sky/shell/shell/classes.dex', + 'gen/sky/shell/shell/classes.dex.jar', 'gen/sky/shell/shell/shell/libs/armeabi-v7a/libsky_shell.so', + # TODO(mpcomplete): obsolete. Remove after updating the flutter tool. + 'gen/sky/shell/shell/classes.dex', ], 'linux-x64': [ 'dist/shell/icudtl.dat',