# Copyright 2013 The Flutter Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//build/config/android/config.gni") import("$flutter_root/common/config.gni") import("$flutter_root/shell/config.gni") import("$flutter_root/shell/gpu/gpu.gni") import("$flutter_root/shell/version/version.gni") shell_gpu_configuration("android_gpu_configuration") { enable_software = true enable_vulkan = shell_enable_vulkan enable_gl = true enable_metal = false } shared_library("flutter_shell_native") { visibility = [ ":*" ] output_name = "flutter" sources = [ "$root_build_dir/flutter_icu/icudtl.o", "android_context_gl.cc", "android_context_gl.h", "android_environment_gl.cc", "android_environment_gl.h", "android_external_texture_gl.cc", "android_external_texture_gl.h", "android_native_window.cc", "android_native_window.h", "android_shell_holder.cc", "android_shell_holder.h", "android_surface.cc", "android_surface.h", "android_surface_gl.cc", "android_surface_gl.h", "android_surface_software.cc", "android_surface_software.h", "apk_asset_provider.cc", "apk_asset_provider.h", "flutter_main.cc", "flutter_main.h", "library_loader.cc", "platform_message_response_android.cc", "platform_message_response_android.h", "platform_view_android.cc", "platform_view_android.h", "platform_view_android_jni.cc", "platform_view_android_jni.h", "vsync_waiter_android.cc", "vsync_waiter_android.h", ] deps = [ ":android_gpu_configuration", ":icudtl_object", "$flutter_root/assets", "$flutter_root/common", "$flutter_root/flow", "$flutter_root/fml", "$flutter_root/lib/ui", "$flutter_root/runtime", "$flutter_root/runtime:libdart", "$flutter_root/shell/common", "//third_party/skia", ] public_configs = [ "$flutter_root:config" ] defines = [] if (shell_enable_vulkan) { sources += [ "android_surface_vulkan.cc", "android_surface_vulkan.h", ] deps += [ "$flutter_root/vulkan" ] defines += [ "SHELL_ENABLE_VULKAN" ] } libs = [ "android", "EGL", "GLESv2", ] ldflags = [ "-Wl,--version-script=" + rebase_path("android_exports.lst") ] } action("gen_android_build_config_java") { script = "$flutter_root/tools/gen_android_buildconfig.py" build_config_java = "$target_gen_dir/io/flutter/BuildConfig.java" outputs = [ build_config_java, ] args = [ "--out", rebase_path(build_config_java), "--runtime-mode", flutter_runtime_mode, ] } embedding_artifact_id = "flutter_embedding_$flutter_runtime_mode" embedding_jar_filename = "$embedding_artifact_id.jar" embedding_jar_path = "$root_out_dir/$embedding_jar_filename" embedding_sources_jar_filename = "$embedding_artifact_id-sources.jar" embedding_source_jar_path = "$root_out_dir/$embedding_sources_jar_filename" action("flutter_shell_java") { script = "//build/android/gyp/javac.py" depfile = "$target_gen_dir/$target_name.d" jar_path = embedding_jar_path source_jar_path = embedding_source_jar_path sources = [ "io/flutter/Log.java", "io/flutter/app/FlutterActivity.java", "io/flutter/app/FlutterActivityDelegate.java", "io/flutter/app/FlutterActivityEvents.java", "io/flutter/app/FlutterApplication.java", "io/flutter/app/FlutterFragmentActivity.java", "io/flutter/app/FlutterPluginRegistry.java", "io/flutter/embedding/android/AndroidKeyProcessor.java", "io/flutter/embedding/android/AndroidTouchProcessor.java", "io/flutter/embedding/android/DrawableSplashScreen.java", "io/flutter/embedding/android/FlutterActivity.java", "io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java", "io/flutter/embedding/android/FlutterEngineConfigurator.java", "io/flutter/embedding/android/FlutterEngineProvider.java", "io/flutter/embedding/android/FlutterFragment.java", "io/flutter/embedding/android/FlutterSplashView.java", "io/flutter/embedding/android/FlutterSurfaceView.java", "io/flutter/embedding/android/FlutterTextureView.java", "io/flutter/embedding/android/FlutterView.java", "io/flutter/embedding/android/SplashScreen.java", "io/flutter/embedding/android/SplashScreenProvider.java", "io/flutter/embedding/engine/FlutterEngine.java", "io/flutter/embedding/engine/FlutterEngineAndroidLifecycle.java", "io/flutter/embedding/engine/FlutterEngineCache.java", "io/flutter/embedding/engine/FlutterEnginePluginRegistry.java", "io/flutter/embedding/engine/FlutterJNI.java", "io/flutter/embedding/engine/FlutterShellArgs.java", "io/flutter/embedding/engine/dart/DartExecutor.java", "io/flutter/embedding/engine/dart/DartMessenger.java", "io/flutter/embedding/engine/dart/PlatformMessageHandler.java", "io/flutter/embedding/engine/plugins/FlutterPlugin.java", "io/flutter/embedding/engine/plugins/PluginRegistry.java", "io/flutter/embedding/engine/plugins/activity/ActivityAware.java", "io/flutter/embedding/engine/plugins/activity/ActivityControlSurface.java", "io/flutter/embedding/engine/plugins/activity/ActivityPluginBinding.java", "io/flutter/embedding/engine/plugins/broadcastreceiver/BroadcastReceiverAware.java", "io/flutter/embedding/engine/plugins/broadcastreceiver/BroadcastReceiverControlSurface.java", "io/flutter/embedding/engine/plugins/broadcastreceiver/BroadcastReceiverPluginBinding.java", "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderAware.java", "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderControlSurface.java", "io/flutter/embedding/engine/plugins/contentprovider/ContentProviderPluginBinding.java", "io/flutter/embedding/engine/plugins/service/ServiceAware.java", "io/flutter/embedding/engine/plugins/service/ServiceControlSurface.java", "io/flutter/embedding/engine/plugins/service/ServicePluginBinding.java", "io/flutter/embedding/engine/plugins/shim/ShimPluginRegistry.java", "io/flutter/embedding/engine/plugins/shim/ShimRegistrar.java", "io/flutter/embedding/engine/renderer/FlutterRenderer.java", "io/flutter/embedding/engine/renderer/FlutterUiDisplayListener.java", "io/flutter/embedding/engine/renderer/RenderSurface.java", "io/flutter/embedding/engine/systemchannels/AccessibilityChannel.java", "io/flutter/embedding/engine/systemchannels/KeyEventChannel.java", "io/flutter/embedding/engine/systemchannels/LifecycleChannel.java", "io/flutter/embedding/engine/systemchannels/LocalizationChannel.java", "io/flutter/embedding/engine/systemchannels/NavigationChannel.java", "io/flutter/embedding/engine/systemchannels/PlatformChannel.java", "io/flutter/embedding/engine/systemchannels/PlatformViewsChannel.java", "io/flutter/embedding/engine/systemchannels/SettingsChannel.java", "io/flutter/embedding/engine/systemchannels/SystemChannel.java", "io/flutter/embedding/engine/systemchannels/TextInputChannel.java", "io/flutter/plugin/common/ActivityLifecycleListener.java", "io/flutter/plugin/common/BasicMessageChannel.java", "io/flutter/plugin/common/BinaryCodec.java", "io/flutter/plugin/common/BinaryMessenger.java", "io/flutter/plugin/common/ErrorLogResult.java", "io/flutter/plugin/common/EventChannel.java", "io/flutter/plugin/common/FlutterException.java", "io/flutter/plugin/common/JSONMessageCodec.java", "io/flutter/plugin/common/JSONMethodCodec.java", "io/flutter/plugin/common/JSONUtil.java", "io/flutter/plugin/common/MessageCodec.java", "io/flutter/plugin/common/MethodCall.java", "io/flutter/plugin/common/MethodChannel.java", "io/flutter/plugin/common/MethodCodec.java", "io/flutter/plugin/common/PluginRegistry.java", "io/flutter/plugin/common/StandardMessageCodec.java", "io/flutter/plugin/common/StandardMethodCodec.java", "io/flutter/plugin/common/StringCodec.java", "io/flutter/plugin/editing/InputConnectionAdaptor.java", "io/flutter/plugin/editing/TextInputPlugin.java", "io/flutter/plugin/platform/AccessibilityEventsDelegate.java", "io/flutter/plugin/platform/PlatformPlugin.java", "io/flutter/plugin/platform/PlatformView.java", "io/flutter/plugin/platform/PlatformViewFactory.java", "io/flutter/plugin/platform/PlatformViewRegistry.java", "io/flutter/plugin/platform/PlatformViewRegistryImpl.java", "io/flutter/plugin/platform/PlatformViewsAccessibilityDelegate.java", "io/flutter/plugin/platform/PlatformViewsController.java", "io/flutter/plugin/platform/SingleViewPresentation.java", "io/flutter/plugin/platform/VirtualDisplayController.java", "io/flutter/util/PathUtils.java", "io/flutter/util/Preconditions.java", "io/flutter/util/Predicate.java", "io/flutter/view/AccessibilityBridge.java", "io/flutter/view/AccessibilityViewEmbedder.java", "io/flutter/view/FlutterCallbackInformation.java", "io/flutter/view/FlutterMain.java", "io/flutter/view/FlutterNativeView.java", "io/flutter/view/FlutterRunArguments.java", "io/flutter/view/FlutterView.java", "io/flutter/view/ResourceCleaner.java", "io/flutter/view/ResourceExtractor.java", "io/flutter/view/ResourcePaths.java", "io/flutter/view/TextureRegistry.java", "io/flutter/view/VsyncWaiter.java", ] sources += get_target_outputs(":gen_android_build_config_java") android_support_jars = [ "//third_party/android_support/android_support_compat.jar", "//third_party/android_support/android_support_annotations.jar", "//third_party/android_support/android_support_fragment.jar", "//third_party/android_support/android_arch_lifecycle_common.jar", "//third_party/android_support/android_arch_lifecycle_common_java8.jar", "//third_party/android_support/android_arch_lifecycle_runtime.jar", "//third_party/android_support/android_arch_lifecycle_viewmodel.jar", ] outputs = [ depfile, jar_path, jar_path + ".md5.stamp", source_jar_path, source_jar_path + ".md5.stamp", ] inputs = [ android_sdk_jar, ] inputs += android_support_jars _rebased_current_path = rebase_path(".") _rebased_jar_path = rebase_path(jar_path, root_build_dir) _rebased_source_jar_path = rebase_path(source_jar_path, root_build_dir) _rebased_depfile = rebase_path(depfile, root_build_dir) _rebased_android_sdk_jar = rebase_path(android_sdk_jar, root_build_dir) _rebased_classpath = [ _rebased_android_sdk_jar ] + rebase_path(android_support_jars, root_build_dir) args = [ "--depfile=$_rebased_depfile", "--jar-path=$_rebased_jar_path", "--jar-source-path=$_rebased_source_jar_path", "--jar-source-base-dir=$_rebased_current_path", "--classpath=$_rebased_classpath", "--bootclasspath=$_rebased_android_sdk_jar", ] args += rebase_path(sources, root_build_dir) deps = [ ":gen_android_build_config_java", ] } action("icudtl_object") { script = "$flutter_root/sky/tools/objcopy.py" icudtl_input = "//third_party/icu/flutter/icudtl.dat" icudtl_output = "$root_build_dir/flutter_icu/icudtl.o" inputs = [ "$icudtl_input", ] outputs = [ "$icudtl_output", ] args = [ "--objcopy", rebase_path(android_objcopy), "--input", rebase_path(icudtl_input), "--output", rebase_path(icudtl_output), "--arch", current_cpu, ] } action("android") { script = "//build/android/gyp/create_flutter_jar.py" if (stripped_symbols) { engine_library = "lib.stripped/libflutter.so" } else { engine_library = "libflutter.so" } inputs = [ "$root_build_dir/$embedding_jar_filename", "$root_build_dir/$engine_library", ] engine_artifact_id = string_replace(android_app_abi, "-", "_") + "_" + flutter_runtime_mode engine_jar_filename = "$engine_artifact_id.jar" outputs = [ "$root_build_dir/flutter.jar", "$root_build_dir/$engine_jar_filename", ] args = [ "--output", rebase_path("flutter.jar", root_build_dir, root_build_dir), "--output_native_jar", rebase_path(engine_jar_filename, root_build_dir, root_build_dir), "--dist_jar", rebase_path(embedding_jar_filename, root_build_dir, root_build_dir), "--native_lib", rebase_path("$engine_library", root_build_dir, root_build_dir), "--android_abi", "$android_app_abi", ] deps = [ ":flutter_shell_java", ":flutter_shell_native", ":pom_embedding", ":pom_libflutter", ] } action("pom_libflutter") { script = "$flutter_root/tools/android_support/generate_pom_file.py" inputs = [ "$flutter_root/tools/android_support/files.json", ] artifact_id = string_replace(android_app_abi, "-", "_") + "_" + flutter_runtime_mode outputs = [ "$root_build_dir/$artifact_id.pom", ] args = [ "--destination", rebase_path(root_build_dir), "--engine-version", engine_version, "--engine-artifact-id", artifact_id, ] } action("pom_embedding") { script = "$flutter_root/tools/android_support/generate_pom_file.py" inputs = [ "$flutter_root/tools/android_support/files.json", ] artifact_id = "flutter_embedding_$flutter_runtime_mode" outputs = [ "$root_build_dir/$artifact_id.pom", ] args = [ "--destination", rebase_path(root_build_dir), "--engine-version", engine_version, "--engine-artifact-id", artifact_id, "--include-embedding-dependencies", "true", ] } # To build and run: # testing/run_tests.py [--type=java] [--filter=io.flutter.TestClassName] action("robolectric_tests") { script = "//build/android/gyp/javac.py" depfile = "$target_gen_dir/$target_name.d" jar_path = "$root_out_dir/robolectric_tests.jar" sources = [ "test/io/flutter/FlutterTestSuite.java", "test/io/flutter/SmokeTest.java", "test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java", "test/io/flutter/embedding/android/FlutterActivityTest.java", "test/io/flutter/embedding/android/FlutterFragmentTest.java", "test/io/flutter/embedding/engine/FlutterEngineCacheTest.java", "test/io/flutter/embedding/engine/FlutterJNITest.java", "test/io/flutter/embedding/engine/RenderingComponentTest.java", "test/io/flutter/embedding/engine/renderer/FlutterRendererTest.java", "test/io/flutter/embedding/engine/systemchannels/PlatformChannelTest.java", "test/io/flutter/util/PreconditionsTest.java", ] outputs = [ depfile, jar_path, jar_path + ".md5.stamp", ] _jar_dependencies = [ android_sdk_jar, embedding_jar_path, "//third_party/robolectric/lib/junit-3.8.jar", "//third_party/robolectric/lib/junit-4.13-beta-3.jar", "//third_party/robolectric/lib/robolectric-3.8.jar", "//third_party/robolectric/lib/shadows-framework-3.8.jar", "//third_party/robolectric/lib/annotations-3.8.jar", "//third_party/robolectric/lib/runtime-1.1.1.jar", "//third_party/robolectric/lib/common-1.1.1.jar", "//third_party/robolectric/lib/common-java8-1.1.1.jar", "//third_party/robolectric/lib/support-annotations-28.0.0.jar", "//third_party/robolectric/lib/support-fragment-25.2.0.jar", "//third_party/robolectric/lib/mockito-all-1.10.19.jar", ] inputs = _jar_dependencies _rebased_jar_path = rebase_path(jar_path, root_build_dir) _rebased_depfile = rebase_path(depfile, root_build_dir) _rebased_classpath = rebase_path(_jar_dependencies, root_build_dir) _rebased_srcjars = rebase_path(_jar_dependencies, root_build_dir) args = [ "--depfile=$_rebased_depfile", "--jar-path=$_rebased_jar_path", "--classpath=$_rebased_classpath", "--java-srcjars=$_rebased_srcjars", ] args += rebase_path(sources, root_build_dir) deps = [ ":android", ":flutter_shell_java", ] }