BUILD.gn 15.6 KB
Newer Older
M
Michael Goderbauer 已提交
1
# Copyright 2013 The Flutter Authors. All rights reserved.
2 3 4 5
# 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")
6 7
import("$flutter_root/common/config.gni")
import("$flutter_root/shell/config.gni")
8
import("$flutter_root/shell/gpu/gpu.gni")
9
import("$flutter_root/shell/version/version.gni")
10 11 12 13 14

shell_gpu_configuration("android_gpu_configuration") {
  enable_software = true
  enable_vulkan = shell_enable_vulkan
  enable_gl = true
15
  enable_metal = false
16
}
17

18
shared_library("flutter_shell_native") {
19 20
  visibility = [ ":*" ]

21
  output_name = "flutter"
22

23
  sources = [
24
    "$root_build_dir/flutter_icu/icudtl.o",
25 26 27 28
    "android_context_gl.cc",
    "android_context_gl.h",
    "android_environment_gl.cc",
    "android_environment_gl.h",
29
    "android_external_texture_gl.cc",
30
    "android_external_texture_gl.h",
31 32
    "android_native_window.cc",
    "android_native_window.h",
33 34
    "android_shell_holder.cc",
    "android_shell_holder.h",
35 36
    "android_surface.cc",
    "android_surface.h",
37 38
    "android_surface_gl.cc",
    "android_surface_gl.h",
39
    "android_surface_software.cc",
40
    "android_surface_software.h",
41
    "apk_asset_provider.cc",
42
    "apk_asset_provider.h",
43 44 45
    "flutter_main.cc",
    "flutter_main.h",
    "library_loader.cc",
46 47
    "platform_message_response_android.cc",
    "platform_message_response_android.h",
48 49
    "platform_view_android.cc",
    "platform_view_android.h",
50 51
    "platform_view_android_jni.cc",
    "platform_view_android_jni.h",
52 53
    "vsync_waiter_android.cc",
    "vsync_waiter_android.h",
54 55 56
  ]

  deps = [
57
    ":android_gpu_configuration",
58
    ":icudtl_object",
59
    "$flutter_root/assets",
60 61 62 63 64
    "$flutter_root/common",
    "$flutter_root/flow",
    "$flutter_root/fml",
    "$flutter_root/lib/ui",
    "$flutter_root/runtime",
65
    "$flutter_root/runtime:libdart",
66
    "$flutter_root/shell/common",
67
    "//third_party/skia",
68 69
  ]

70
  public_configs = [ "$flutter_root:config" ]
71

72 73 74 75 76 77 78 79
  defines = []

  if (shell_enable_vulkan) {
    sources += [
      "android_surface_vulkan.cc",
      "android_surface_vulkan.h",
    ]

80
    deps += [ "$flutter_root/vulkan" ]
81 82 83 84

    defines += [ "SHELL_ENABLE_VULKAN" ]
  }

85 86 87 88
  libs = [
    "android",
    "EGL",
    "GLESv2",
89
  ]
90

91
  ldflags = [ "-Wl,--version-script=" + rebase_path("android_exports.lst") ]
92 93
}

94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
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,
  ]
}

111
embedding_artifact_id = "flutter_embedding_$flutter_runtime_mode"
112
embedding_jar_filename = "$embedding_artifact_id.jar"
113 114
embedding_jar_path = "$root_out_dir/$embedding_jar_filename"

115
embedding_sources_jar_filename = "$embedding_artifact_id-sources.jar"
116
embedding_source_jar_path = "$root_out_dir/$embedding_sources_jar_filename"
117

D
Dan Field 已提交
118 119 120
action("flutter_shell_java") {
  script = "//build/android/gyp/javac.py"
  depfile = "$target_gen_dir/$target_name.d"
121

122 123
  jar_path = embedding_jar_path
  source_jar_path = embedding_source_jar_path
D
Dan Field 已提交
124 125

  sources = [
126
    "io/flutter/Log.java",
127
    "io/flutter/app/FlutterActivity.java",
128 129
    "io/flutter/app/FlutterActivityDelegate.java",
    "io/flutter/app/FlutterActivityEvents.java",
130
    "io/flutter/app/FlutterApplication.java",
131
    "io/flutter/app/FlutterFragmentActivity.java",
132
    "io/flutter/app/FlutterPluginRegistry.java",
133 134
    "io/flutter/embedding/android/AndroidKeyProcessor.java",
    "io/flutter/embedding/android/AndroidTouchProcessor.java",
135
    "io/flutter/embedding/android/DrawableSplashScreen.java",
136
    "io/flutter/embedding/android/FlutterActivity.java",
137 138 139
    "io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java",
    "io/flutter/embedding/android/FlutterEngineConfigurator.java",
    "io/flutter/embedding/android/FlutterEngineProvider.java",
140
    "io/flutter/embedding/android/FlutterFragment.java",
141
    "io/flutter/embedding/android/FlutterSplashView.java",
142 143 144
    "io/flutter/embedding/android/FlutterSurfaceView.java",
    "io/flutter/embedding/android/FlutterTextureView.java",
    "io/flutter/embedding/android/FlutterView.java",
145
    "io/flutter/embedding/android/SplashScreen.java",
146
    "io/flutter/embedding/android/SplashScreenProvider.java",
147
    "io/flutter/embedding/engine/FlutterEngine.java",
148
    "io/flutter/embedding/engine/FlutterEngineAndroidLifecycle.java",
149
    "io/flutter/embedding/engine/FlutterEngineCache.java",
150
    "io/flutter/embedding/engine/FlutterEnginePluginRegistry.java",
151
    "io/flutter/embedding/engine/FlutterJNI.java",
152
    "io/flutter/embedding/engine/FlutterShellArgs.java",
153 154
    "io/flutter/embedding/engine/dart/DartExecutor.java",
    "io/flutter/embedding/engine/dart/DartMessenger.java",
155
    "io/flutter/embedding/engine/dart/PlatformMessageHandler.java",
156 157
    "io/flutter/embedding/engine/plugins/FlutterPlugin.java",
    "io/flutter/embedding/engine/plugins/PluginRegistry.java",
158 159 160
    "io/flutter/embedding/engine/plugins/activity/ActivityAware.java",
    "io/flutter/embedding/engine/plugins/activity/ActivityControlSurface.java",
    "io/flutter/embedding/engine/plugins/activity/ActivityPluginBinding.java",
161 162 163 164 165 166 167 168 169
    "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",
170 171
    "io/flutter/embedding/engine/plugins/shim/ShimPluginRegistry.java",
    "io/flutter/embedding/engine/plugins/shim/ShimRegistrar.java",
172
    "io/flutter/embedding/engine/renderer/FlutterRenderer.java",
173 174
    "io/flutter/embedding/engine/renderer/FlutterUiDisplayListener.java",
    "io/flutter/embedding/engine/renderer/RenderSurface.java",
175
    "io/flutter/embedding/engine/systemchannels/AccessibilityChannel.java",
176 177 178 179 180
    "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",
181
    "io/flutter/embedding/engine/systemchannels/PlatformViewsChannel.java",
182
    "io/flutter/embedding/engine/systemchannels/SettingsChannel.java",
183
    "io/flutter/embedding/engine/systemchannels/SystemChannel.java",
184
    "io/flutter/embedding/engine/systemchannels/TextInputChannel.java",
A
Adam Barth 已提交
185
    "io/flutter/plugin/common/ActivityLifecycleListener.java",
186
    "io/flutter/plugin/common/BasicMessageChannel.java",
187
    "io/flutter/plugin/common/BinaryCodec.java",
188
    "io/flutter/plugin/common/BinaryMessenger.java",
189
    "io/flutter/plugin/common/ErrorLogResult.java",
190
    "io/flutter/plugin/common/EventChannel.java",
191
    "io/flutter/plugin/common/FlutterException.java",
192 193
    "io/flutter/plugin/common/JSONMessageCodec.java",
    "io/flutter/plugin/common/JSONMethodCodec.java",
194
    "io/flutter/plugin/common/JSONUtil.java",
195 196
    "io/flutter/plugin/common/MessageCodec.java",
    "io/flutter/plugin/common/MethodCall.java",
197
    "io/flutter/plugin/common/MethodChannel.java",
198
    "io/flutter/plugin/common/MethodCodec.java",
199
    "io/flutter/plugin/common/PluginRegistry.java",
200 201
    "io/flutter/plugin/common/StandardMessageCodec.java",
    "io/flutter/plugin/common/StandardMethodCodec.java",
202
    "io/flutter/plugin/common/StringCodec.java",
203 204
    "io/flutter/plugin/editing/InputConnectionAdaptor.java",
    "io/flutter/plugin/editing/TextInputPlugin.java",
205
    "io/flutter/plugin/platform/AccessibilityEventsDelegate.java",
A
Adam Barth 已提交
206
    "io/flutter/plugin/platform/PlatformPlugin.java",
207 208 209 210
    "io/flutter/plugin/platform/PlatformView.java",
    "io/flutter/plugin/platform/PlatformViewFactory.java",
    "io/flutter/plugin/platform/PlatformViewRegistry.java",
    "io/flutter/plugin/platform/PlatformViewRegistryImpl.java",
211
    "io/flutter/plugin/platform/PlatformViewsAccessibilityDelegate.java",
212
    "io/flutter/plugin/platform/PlatformViewsController.java",
213 214
    "io/flutter/plugin/platform/SingleViewPresentation.java",
    "io/flutter/plugin/platform/VirtualDisplayController.java",
215
    "io/flutter/util/PathUtils.java",
216
    "io/flutter/util/Preconditions.java",
D
Dan Field 已提交
217
    "io/flutter/util/Predicate.java",
218
    "io/flutter/view/AccessibilityBridge.java",
219
    "io/flutter/view/AccessibilityViewEmbedder.java",
220
    "io/flutter/view/FlutterCallbackInformation.java",
221
    "io/flutter/view/FlutterMain.java",
222
    "io/flutter/view/FlutterNativeView.java",
223
    "io/flutter/view/FlutterRunArguments.java",
224 225 226
    "io/flutter/view/FlutterView.java",
    "io/flutter/view/ResourceCleaner.java",
    "io/flutter/view/ResourceExtractor.java",
A
Adam Barth 已提交
227
    "io/flutter/view/ResourcePaths.java",
228
    "io/flutter/view/TextureRegistry.java",
229
    "io/flutter/view/VsyncWaiter.java",
230
  ]
231

232 233
  sources += get_target_outputs(":gen_android_build_config_java")

D
Dan Field 已提交
234 235 236 237 238
  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",
239 240
    "//third_party/android_support/android_arch_lifecycle_common_java8.jar",
    "//third_party/android_support/android_arch_lifecycle_runtime.jar",
D
Dan Field 已提交
241
    "//third_party/android_support/android_arch_lifecycle_viewmodel.jar",
242 243
  ]

D
Dan Field 已提交
244 245 246 247
  outputs = [
    depfile,
    jar_path,
    jar_path + ".md5.stamp",
248 249
    source_jar_path,
    source_jar_path + ".md5.stamp",
D
Dan Field 已提交
250 251 252 253 254 255
  ]
  inputs = [
    android_sdk_jar,
  ]
  inputs += android_support_jars

256
  _rebased_current_path = rebase_path(".")
D
Dan Field 已提交
257
  _rebased_jar_path = rebase_path(jar_path, root_build_dir)
258
  _rebased_source_jar_path = rebase_path(source_jar_path, root_build_dir)
D
Dan Field 已提交
259 260 261 262 263 264 265 266
  _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",
267 268
    "--jar-source-path=$_rebased_source_jar_path",
    "--jar-source-base-dir=$_rebased_current_path",
D
Dan Field 已提交
269 270 271
    "--classpath=$_rebased_classpath",
    "--bootclasspath=$_rebased_android_sdk_jar",
  ]
272

D
Dan Field 已提交
273
  args += rebase_path(sources, root_build_dir)
274 275 276 277

  deps = [
    ":gen_android_build_config_java",
  ]
278 279
}

280 281
action("icudtl_object") {
  script = "$flutter_root/sky/tools/objcopy.py"
282

283 284 285 286 287
  icudtl_input = "//third_party/icu/flutter/icudtl.dat"
  icudtl_output = "$root_build_dir/flutter_icu/icudtl.o"

  inputs = [
    "$icudtl_input",
288
  ]
289 290

  outputs = [
291
    "$icudtl_output",
292 293
  ]

294
  args = [
295 296 297 298 299 300 301 302
    "--objcopy",
    rebase_path(android_objcopy),
    "--input",
    rebase_path(icudtl_input),
    "--output",
    rebase_path(icudtl_output),
    "--arch",
    current_cpu,
303 304 305
  ]
}

306 307
action("android") {
  script = "//build/android/gyp/create_flutter_jar.py"
308

309 310 311 312 313 314
  if (stripped_symbols) {
    engine_library = "lib.stripped/libflutter.so"
  } else {
    engine_library = "libflutter.so"
  }

315
  inputs = [
316
    "$root_build_dir/$embedding_jar_filename",
317
    "$root_build_dir/$engine_library",
318
  ]
319

320 321 322
  engine_artifact_id =
      string_replace(android_app_abi, "-", "_") + "_" + flutter_runtime_mode

323
  engine_jar_filename = "$engine_artifact_id.jar"
324

325 326
  outputs = [
    "$root_build_dir/flutter.jar",
327
    "$root_build_dir/$engine_jar_filename",
328
  ]
329

330 331 332
  args = [
    "--output",
    rebase_path("flutter.jar", root_build_dir, root_build_dir),
333
    "--output_native_jar",
334
    rebase_path(engine_jar_filename, root_build_dir, root_build_dir),
335
    "--dist_jar",
336
    rebase_path(embedding_jar_filename, root_build_dir, root_build_dir),
337
    "--native_lib",
338
    rebase_path("$engine_library", root_build_dir, root_build_dir),
339 340 341
    "--android_abi",
    "$android_app_abi",
  ]
342 343

  deps = [
344 345
    ":flutter_shell_java",
    ":flutter_shell_native",
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361
    ":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 = [
362
    "$root_build_dir/$artifact_id.pom",
363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384
  ]

  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 = [
385
    "$root_build_dir/$artifact_id.pom",
386 387 388 389 390 391 392 393 394 395 396
  ]

  args = [
    "--destination",
    rebase_path(root_build_dir),
    "--engine-version",
    engine_version,
    "--engine-artifact-id",
    artifact_id,
    "--include-embedding-dependencies",
    "true",
397 398
  ]
}
399 400 401 402 403 404 405 406 407 408 409 410

# 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",
411
    "test/io/flutter/embedding/android/FlutterActivityAndFragmentDelegateTest.java",
412 413 414
    "test/io/flutter/embedding/android/FlutterActivityTest.java",
    "test/io/flutter/embedding/android/FlutterFragmentTest.java",
    "test/io/flutter/embedding/engine/FlutterEngineCacheTest.java",
415 416 417
    "test/io/flutter/embedding/engine/FlutterJNITest.java",
    "test/io/flutter/embedding/engine/RenderingComponentTest.java",
    "test/io/flutter/embedding/engine/renderer/FlutterRendererTest.java",
418
    "test/io/flutter/embedding/engine/systemchannels/PlatformChannelTest.java",
419 420 421 422 423 424 425 426 427 428 429
    "test/io/flutter/util/PreconditionsTest.java",
  ]

  outputs = [
    depfile,
    jar_path,
    jar_path + ".md5.stamp",
  ]

  _jar_dependencies = [
    android_sdk_jar,
430
    embedding_jar_path,
431 432 433
    "//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",
434
    "//third_party/robolectric/lib/shadows-framework-3.8.jar",
435
    "//third_party/robolectric/lib/annotations-3.8.jar",
436 437 438 439
    "//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",
440
    "//third_party/robolectric/lib/support-fragment-25.2.0.jar",
441
    "//third_party/robolectric/lib/mockito-all-1.10.19.jar",
442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
  ]

  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 = [
461
    ":android",
462 463 464
    ":flutter_shell_java",
  ]
}