1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors 2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 4*8975f5c5SAndroid Build Coastguard Worker 5*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/android/build_vars.gni") 6*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/android/config.gni") 7*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/android/rules.gni") 8*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/clang/clang.gni") 9*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/coverage/coverage.gni") 10*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/gclient_args.gni") 11*8975f5c5SAndroid Build Coastguard Workerimport("//build/config/python.gni") 12*8975f5c5SAndroid Build Coastguard Workerimport("//build_overrides/build.gni") 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Workerif (build_with_chromium) { 15*8975f5c5SAndroid Build Coastguard Worker import("//base/allocator/partition_allocator/partition_alloc.gni") 16*8975f5c5SAndroid Build Coastguard Worker} 17*8975f5c5SAndroid Build Coastguard Worker 18*8975f5c5SAndroid Build Coastguard Workerif (enable_java_templates) { 19*8975f5c5SAndroid Build Coastguard Worker # Create or update the API versions cache if necessary by running a 20*8975f5c5SAndroid Build Coastguard Worker # functionally empty lint task. This prevents racy creation of the 21*8975f5c5SAndroid Build Coastguard Worker # cache while linting java targets in android_lint. 22*8975f5c5SAndroid Build Coastguard Worker android_lint("prepare_android_lint_cache") { 23*8975f5c5SAndroid Build Coastguard Worker create_cache = true 24*8975f5c5SAndroid Build Coastguard Worker } 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Worker generate_build_config_srcjar("placeholder_build_config_srcjar") { 27*8975f5c5SAndroid Build Coastguard Worker } 28*8975f5c5SAndroid Build Coastguard Worker 29*8975f5c5SAndroid Build Coastguard Worker generate_build_config_srcjar("build_config_for_robolectric_srcjar") { 30*8975f5c5SAndroid Build Coastguard Worker testonly = true 31*8975f5c5SAndroid Build Coastguard Worker } 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Worker write_native_libraries_java("native_libraries_gen") { 34*8975f5c5SAndroid Build Coastguard Worker use_final_fields = false 35*8975f5c5SAndroid Build Coastguard Worker } 36*8975f5c5SAndroid Build Coastguard Worker 37*8975f5c5SAndroid Build Coastguard Worker java_library("build_java") { 38*8975f5c5SAndroid Build Coastguard Worker supports_android = true 39*8975f5c5SAndroid Build Coastguard Worker 40*8975f5c5SAndroid Build Coastguard Worker # Required to prevent circular dependency from //tools/android/errorprone_plugin. 41*8975f5c5SAndroid Build Coastguard Worker enable_errorprone = false 42*8975f5c5SAndroid Build Coastguard Worker srcjar_deps = [ 43*8975f5c5SAndroid Build Coastguard Worker ":native_libraries_gen", 44*8975f5c5SAndroid Build Coastguard Worker ":placeholder_build_config_srcjar", 45*8975f5c5SAndroid Build Coastguard Worker ] 46*8975f5c5SAndroid Build Coastguard Worker sources = [ 47*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/AlwaysInline.java", 48*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/AssumeNonNull.java", 49*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/CheckDiscard.java", 50*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/DoNotClassMerge.java", 51*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/DoNotInline.java", 52*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/DoNotStripLogs.java", 53*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/EnsuresNonNull.java", 54*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/EnsuresNonNullIf.java", 55*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/IdentifierNameString.java", 56*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/Initializer.java", 57*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/MockedInTests.java", 58*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/NullMarked.java", 59*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/NullUnmarked.java", 60*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/Nullable.java", 61*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/RequiresNonNull.java", 62*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/ServiceImpl.java", 63*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/UsedByReflection.java", 64*8975f5c5SAndroid Build Coastguard Worker "java/src/org/chromium/build/annotations/UsedReflectively.java", 65*8975f5c5SAndroid Build Coastguard Worker ] 66*8975f5c5SAndroid Build Coastguard Worker 67*8975f5c5SAndroid Build Coastguard Worker jar_excluded_patterns = [ "*/build/BuildConfig.class" ] 68*8975f5c5SAndroid Build Coastguard Worker 69*8975f5c5SAndroid Build Coastguard Worker # New version of NativeLibraries.java (with the actual correct values) will 70*8975f5c5SAndroid Build Coastguard Worker # be created when creating an apk. 71*8975f5c5SAndroid Build Coastguard Worker jar_excluded_patterns += [ "*/NativeLibraries.class" ] 72*8975f5c5SAndroid Build Coastguard Worker 73*8975f5c5SAndroid Build Coastguard Worker proguard_configs = [ "chromium_annotations.flags" ] 74*8975f5c5SAndroid Build Coastguard Worker } 75*8975f5c5SAndroid Build Coastguard Worker 76*8975f5c5SAndroid Build Coastguard Worker # Not all //build embedders pull in junit_binary deps that live in //third_party. 77*8975f5c5SAndroid Build Coastguard Worker if (build_with_chromium) { 78*8975f5c5SAndroid Build Coastguard Worker android_assets("junit_test_assets") { 79*8975f5c5SAndroid Build Coastguard Worker testonly = true 80*8975f5c5SAndroid Build Coastguard Worker 81*8975f5c5SAndroid Build Coastguard Worker # We just need any file here, so use the test itself. 82*8975f5c5SAndroid Build Coastguard Worker sources = [ "junit/src/org/chromium/build/AndroidAssetsTest.java" ] 83*8975f5c5SAndroid Build Coastguard Worker } 84*8975f5c5SAndroid Build Coastguard Worker android_resources("junit_test_resources") { 85*8975f5c5SAndroid Build Coastguard Worker testonly = true 86*8975f5c5SAndroid Build Coastguard Worker sources = [ "junit/res/values/strings.xml" ] 87*8975f5c5SAndroid Build Coastguard Worker mergeable_android_manifests = [ "junit/AndroidManifest_mergetest.xml" ] 88*8975f5c5SAndroid Build Coastguard Worker } 89*8975f5c5SAndroid Build Coastguard Worker robolectric_binary("build_junit_tests") { 90*8975f5c5SAndroid Build Coastguard Worker # Test has no JNI, so skip JNI Generator step. 91*8975f5c5SAndroid Build Coastguard Worker resources_package = "org.chromium.build" 92*8975f5c5SAndroid Build Coastguard Worker sources = [ 93*8975f5c5SAndroid Build Coastguard Worker "junit/src/org/chromium/build/AndroidAssetsTest.java", 94*8975f5c5SAndroid Build Coastguard Worker "junit/src/org/chromium/build/IncrementalJavacTest.java", 95*8975f5c5SAndroid Build Coastguard Worker ] 96*8975f5c5SAndroid Build Coastguard Worker deps = [ 97*8975f5c5SAndroid Build Coastguard Worker ":junit_test_assets", 98*8975f5c5SAndroid Build Coastguard Worker ":junit_test_resources", 99*8975f5c5SAndroid Build Coastguard Worker "//build/android/test/incremental_javac_gn:no_signature_change_prebuilt_java", 100*8975f5c5SAndroid Build Coastguard Worker "//third_party/junit", 101*8975f5c5SAndroid Build Coastguard Worker ] 102*8975f5c5SAndroid Build Coastguard Worker } 103*8975f5c5SAndroid Build Coastguard Worker } 104*8975f5c5SAndroid Build Coastguard Worker} 105*8975f5c5SAndroid Build Coastguard Worker 106*8975f5c5SAndroid Build Coastguard Workerif (defined(sanitizer_arch)) { 107*8975f5c5SAndroid Build Coastguard Worker action("generate_wrap_sh") { 108*8975f5c5SAndroid Build Coastguard Worker script = "generate_wrap_sh.py" 109*8975f5c5SAndroid Build Coastguard Worker outputs = [ "$target_gen_dir/$target_name/wrap.sh" ] 110*8975f5c5SAndroid Build Coastguard Worker args = [ 111*8975f5c5SAndroid Build Coastguard Worker "--arch=$sanitizer_arch", 112*8975f5c5SAndroid Build Coastguard Worker "--output", 113*8975f5c5SAndroid Build Coastguard Worker rebase_path(outputs[0], root_build_dir), 114*8975f5c5SAndroid Build Coastguard Worker ] 115*8975f5c5SAndroid Build Coastguard Worker } 116*8975f5c5SAndroid Build Coastguard Worker} 117*8975f5c5SAndroid Build Coastguard Worker 118*8975f5c5SAndroid Build Coastguard Worker# TODO(go/turn-down-test-results): Remove once we turn down 119*8975f5c5SAndroid Build Coastguard Worker# test-results.appspot.com 120*8975f5c5SAndroid Build Coastguard Workerpython_library("test_result_presentations_py") { 121*8975f5c5SAndroid Build Coastguard Worker pydeps_file = "pylib/results/presentation/test_results_presentation.pydeps" 122*8975f5c5SAndroid Build Coastguard Worker data = [ 123*8975f5c5SAndroid Build Coastguard Worker "//build/android/pylib/results/presentation/template", 124*8975f5c5SAndroid Build Coastguard Worker "//build/android/pylib/results/presentation/javascript/main_html.js", 125*8975f5c5SAndroid Build Coastguard Worker "//third_party/catapult/third_party/gsutil/", 126*8975f5c5SAndroid Build Coastguard Worker "//third_party/jinja2/debug.py", 127*8975f5c5SAndroid Build Coastguard Worker "//third_party/six", 128*8975f5c5SAndroid Build Coastguard Worker ] 129*8975f5c5SAndroid Build Coastguard Worker} 130*8975f5c5SAndroid Build Coastguard Worker 131*8975f5c5SAndroid Build Coastguard Workerpython_library("devil_chromium_py") { 132*8975f5c5SAndroid Build Coastguard Worker pydeps_file = "devil_chromium.pydeps" 133*8975f5c5SAndroid Build Coastguard Worker data = [ 134*8975f5c5SAndroid Build Coastguard Worker "devil_chromium.py", 135*8975f5c5SAndroid Build Coastguard Worker "devil_chromium.json", 136*8975f5c5SAndroid Build Coastguard Worker "//third_party/catapult/third_party/gsutil/", 137*8975f5c5SAndroid Build Coastguard Worker "//third_party/catapult/devil/devil/devil_dependencies.json", 138*8975f5c5SAndroid Build Coastguard Worker 139*8975f5c5SAndroid Build Coastguard Worker # Read by gn_helpers.BuildWithChromium() 140*8975f5c5SAndroid Build Coastguard Worker "//build/config/gclient_args.gni", 141*8975f5c5SAndroid Build Coastguard Worker ] 142*8975f5c5SAndroid Build Coastguard Worker} 143*8975f5c5SAndroid Build Coastguard Worker 144*8975f5c5SAndroid Build Coastguard Worker# Contains runtime deps for installing apks. 145*8975f5c5SAndroid Build Coastguard Worker# E.g. from test_runner.py or from apk_operations.py. 146*8975f5c5SAndroid Build Coastguard Workergroup("apk_installer_data") { 147*8975f5c5SAndroid Build Coastguard Worker # Other //build users let devil library fetch these from Google Storage. 148*8975f5c5SAndroid Build Coastguard Worker if (build_with_chromium) { 149*8975f5c5SAndroid Build Coastguard Worker if (is_component_build) { 150*8975f5c5SAndroid Build Coastguard Worker data_deps = [ 151*8975f5c5SAndroid Build Coastguard Worker "//build/android/pylib/device/commands", 152*8975f5c5SAndroid Build Coastguard Worker "//tools/android/md5sum", 153*8975f5c5SAndroid Build Coastguard Worker ] 154*8975f5c5SAndroid Build Coastguard Worker } 155*8975f5c5SAndroid Build Coastguard Worker data = 156*8975f5c5SAndroid Build Coastguard Worker [ "//third_party/android_build_tools/bundletool/cipd/bundletool.jar" ] 157*8975f5c5SAndroid Build Coastguard Worker } 158*8975f5c5SAndroid Build Coastguard Worker} 159*8975f5c5SAndroid Build Coastguard Worker 160*8975f5c5SAndroid Build Coastguard Workerpython_library("apk_operations_py") { 161*8975f5c5SAndroid Build Coastguard Worker pydeps_file = "apk_operations.pydeps" 162*8975f5c5SAndroid Build Coastguard Worker deps = [ ":apk_installer_data" ] 163*8975f5c5SAndroid Build Coastguard Worker} 164*8975f5c5SAndroid Build Coastguard Worker 165*8975f5c5SAndroid Build Coastguard Workergroup("test_runner_py") { 166*8975f5c5SAndroid Build Coastguard Worker testonly = true 167*8975f5c5SAndroid Build Coastguard Worker deps = [ 168*8975f5c5SAndroid Build Coastguard Worker ":test_runner_core_py", 169*8975f5c5SAndroid Build Coastguard Worker ":test_runner_device_support", 170*8975f5c5SAndroid Build Coastguard Worker ] 171*8975f5c5SAndroid Build Coastguard Worker} 172*8975f5c5SAndroid Build Coastguard Worker 173*8975f5c5SAndroid Build Coastguard Workerpython_library("test_runner_core_py") { 174*8975f5c5SAndroid Build Coastguard Worker testonly = true 175*8975f5c5SAndroid Build Coastguard Worker pydeps_file = "test_runner.pydeps" 176*8975f5c5SAndroid Build Coastguard Worker data = [ 177*8975f5c5SAndroid Build Coastguard Worker "pylib/gtest/filter/", 178*8975f5c5SAndroid Build Coastguard Worker "pylib/instrumentation/render_test.html.jinja", 179*8975f5c5SAndroid Build Coastguard Worker "pylib/local/machine/local_machine_hostside_tradefed_config.xml", 180*8975f5c5SAndroid Build Coastguard Worker "test_wrapper/logdog_wrapper.py", 181*8975f5c5SAndroid Build Coastguard Worker "//third_party/requests/", 182*8975f5c5SAndroid Build Coastguard Worker ] 183*8975f5c5SAndroid Build Coastguard Worker data_deps = [ ":logdog_wrapper_py" ] 184*8975f5c5SAndroid Build Coastguard Worker if (use_clang_coverage && checkout_clang_coverage_tools) { 185*8975f5c5SAndroid Build Coastguard Worker # Test runner script may use `llvm-profdata` (if exists) to merge 186*8975f5c5SAndroid Build Coastguard Worker # clang code coverage data after each instrumentation test to 187*8975f5c5SAndroid Build Coastguard Worker # save space. The tool only exists when `checkout_clang_coverage_tools` 188*8975f5c5SAndroid Build Coastguard Worker # gclient custom_var is true. 189*8975f5c5SAndroid Build Coastguard Worker data += [ "${clang_base_path}/bin/llvm-profdata" ] 190*8975f5c5SAndroid Build Coastguard Worker } 191*8975f5c5SAndroid Build Coastguard Worker} 192*8975f5c5SAndroid Build Coastguard Worker 193*8975f5c5SAndroid Build Coastguard Workergroup("test_runner_device_support") { 194*8975f5c5SAndroid Build Coastguard Worker testonly = true 195*8975f5c5SAndroid Build Coastguard Worker 196*8975f5c5SAndroid Build Coastguard Worker # We hardcode using these tools from the public sdk in devil_chromium.json and 197*8975f5c5SAndroid Build Coastguard Worker # in pylib's constants. 198*8975f5c5SAndroid Build Coastguard Worker data = [ 199*8975f5c5SAndroid Build Coastguard Worker "${public_android_sdk_build_tools}/aapt", 200*8975f5c5SAndroid Build Coastguard Worker "${public_android_sdk_build_tools}/aapt2", 201*8975f5c5SAndroid Build Coastguard Worker "${public_android_sdk_build_tools}/dexdump", 202*8975f5c5SAndroid Build Coastguard Worker "${public_android_sdk_build_tools}/lib64/libc++.so", 203*8975f5c5SAndroid Build Coastguard Worker "${public_android_sdk_build_tools}/split-select", 204*8975f5c5SAndroid Build Coastguard Worker "${public_android_sdk_root}/platform-tools/adb", 205*8975f5c5SAndroid Build Coastguard Worker ] 206*8975f5c5SAndroid Build Coastguard Worker data_deps = [ 207*8975f5c5SAndroid Build Coastguard Worker ":apk_installer_data", 208*8975f5c5SAndroid Build Coastguard Worker ":devil_chromium_py", 209*8975f5c5SAndroid Build Coastguard Worker ":stack_tools", 210*8975f5c5SAndroid Build Coastguard Worker ] 211*8975f5c5SAndroid Build Coastguard Worker 212*8975f5c5SAndroid Build Coastguard Worker # Other //build users let devil library fetch these from Google Storage. 213*8975f5c5SAndroid Build Coastguard Worker if (build_with_chromium) { 214*8975f5c5SAndroid Build Coastguard Worker if (!is_component_build) { 215*8975f5c5SAndroid Build Coastguard Worker data_deps += [ "//tools/android/forwarder2" ] 216*8975f5c5SAndroid Build Coastguard Worker } 217*8975f5c5SAndroid Build Coastguard Worker data += [ "//tools/android/avd/proto/" ] 218*8975f5c5SAndroid Build Coastguard Worker if (enable_chrome_android_internal) { 219*8975f5c5SAndroid Build Coastguard Worker data += [ "//clank/tools/android/avd/proto/" ] 220*8975f5c5SAndroid Build Coastguard Worker } 221*8975f5c5SAndroid Build Coastguard Worker if (use_full_mte) { 222*8975f5c5SAndroid Build Coastguard Worker data_deps += [ "//tools/android/mte:mte_device_setup" ] 223*8975f5c5SAndroid Build Coastguard Worker } 224*8975f5c5SAndroid Build Coastguard Worker } 225*8975f5c5SAndroid Build Coastguard Worker 226*8975f5c5SAndroid Build Coastguard Worker # Proguard is needed only when using apks (rather than native executables). 227*8975f5c5SAndroid Build Coastguard Worker if (enable_java_templates) { 228*8975f5c5SAndroid Build Coastguard Worker data_deps += [ "//build/android/stacktrace:java_deobfuscate" ] 229*8975f5c5SAndroid Build Coastguard Worker } 230*8975f5c5SAndroid Build Coastguard Worker} 231*8975f5c5SAndroid Build Coastguard Worker 232*8975f5c5SAndroid Build Coastguard Workerpython_library("logdog_wrapper_py") { 233*8975f5c5SAndroid Build Coastguard Worker pydeps_file = "test_wrapper/logdog_wrapper.pydeps" 234*8975f5c5SAndroid Build Coastguard Worker} 235*8975f5c5SAndroid Build Coastguard Worker 236*8975f5c5SAndroid Build Coastguard Workerpython_library("resource_sizes_py") { 237*8975f5c5SAndroid Build Coastguard Worker pydeps_file = "resource_sizes.pydeps" 238*8975f5c5SAndroid Build Coastguard Worker data_deps = [ 239*8975f5c5SAndroid Build Coastguard Worker ":devil_chromium_py", 240*8975f5c5SAndroid Build Coastguard Worker "//third_party/catapult/tracing:convert_chart_json", 241*8975f5c5SAndroid Build Coastguard Worker ] 242*8975f5c5SAndroid Build Coastguard Worker 243*8975f5c5SAndroid Build Coastguard Worker data = [ 244*8975f5c5SAndroid Build Coastguard Worker build_vars_file, 245*8975f5c5SAndroid Build Coastguard Worker "//third_party/llvm-build/Release+Asserts/bin/llvm-readobj", 246*8975f5c5SAndroid Build Coastguard Worker ] 247*8975f5c5SAndroid Build Coastguard Worker} 248*8975f5c5SAndroid Build Coastguard Worker 249*8975f5c5SAndroid Build Coastguard Worker# Tools necessary for symbolizing tombstones or stack traces that are output to 250*8975f5c5SAndroid Build Coastguard Worker# logcat. 251*8975f5c5SAndroid Build Coastguard Worker# Hidden behind build_with_chromium because some third party repos that use 252*8975f5c5SAndroid Build Coastguard Worker# //build don't pull in //third_party/android_platform. 253*8975f5c5SAndroid Build Coastguard Worker# TODO(crbug.com/40145789): Move stack script into //build/third_party 254*8975f5c5SAndroid Build Coastguard Worker# and enable unconditionally. 255*8975f5c5SAndroid Build Coastguard Workergroup("stack_tools") { 256*8975f5c5SAndroid Build Coastguard Worker if (build_with_chromium) { 257*8975f5c5SAndroid Build Coastguard Worker data = [ 258*8975f5c5SAndroid Build Coastguard Worker "tombstones.py", 259*8975f5c5SAndroid Build Coastguard Worker "pylib/symbols/", 260*8975f5c5SAndroid Build Coastguard Worker "stacktrace/", 261*8975f5c5SAndroid Build Coastguard Worker ] 262*8975f5c5SAndroid Build Coastguard Worker 263*8975f5c5SAndroid Build Coastguard Worker data_deps = 264*8975f5c5SAndroid Build Coastguard Worker [ "//third_party/android_platform/development/scripts:stack_py" ] 265*8975f5c5SAndroid Build Coastguard Worker } 266*8975f5c5SAndroid Build Coastguard Worker} 267*8975f5c5SAndroid Build Coastguard Worker 268*8975f5c5SAndroid Build Coastguard Worker# GN evaluates each .gn file once per toolchain, so restricting to default 269*8975f5c5SAndroid Build Coastguard Worker# toolchain will ensure write_file() is called only once. 270*8975f5c5SAndroid Build Coastguard Workerassert(current_toolchain == default_toolchain) 271*8975f5c5SAndroid Build Coastguard Worker 272*8975f5c5SAndroid Build Coastguard Worker# NOTE: If other platforms would benefit from exporting variables, we should 273*8975f5c5SAndroid Build Coastguard Worker# move this to a more top-level place. 274*8975f5c5SAndroid Build Coastguard Worker# It is currently here (instead of //BUILD.gn) to ensure that the file is 275*8975f5c5SAndroid Build Coastguard Worker# written even for non-chromium embedders of //build. 276*8975f5c5SAndroid Build Coastguard Worker_build_vars_json = { 277*8975f5c5SAndroid Build Coastguard Worker # Underscore prefix so that it appears at the top. 278*8975f5c5SAndroid Build Coastguard Worker _HEADER = "Generated during 'gn gen' by //build/android/BUILD.gn." 279*8975f5c5SAndroid Build Coastguard Worker forward_variables_from(android_build_vars_json, "*") 280*8975f5c5SAndroid Build Coastguard Worker} 281*8975f5c5SAndroid Build Coastguard Worker 282*8975f5c5SAndroid Build Coastguard Workerwrite_file(build_vars_file, _build_vars_json, "json") 283