This document describes the .build_config.json files that are used by the Chromium build system for Android-specific targets like APK, resources, and more.

Overview

Instead of using GN's metadata system to propagate information between targets, every Java target writes a .params.json and a .build_config.json file with information needed by targets that depend on them.

They are always written to $target_gen_dir/$target_name.{build_config,params}.json.

.params.json files are written during “gn gen” with values available at that time, while .build_config.json files are written during the build with values that are derived from dependent .json files.

Build scripts, can accept parameter arguments using @FileArg references, which look like:

--some-param=@FileArg(foo.build_config.json:<key1>:<key2>:..<keyN>)

This placeholder will ensure that <filename> is read as a JSON file, then return the value at [key1][key2]...[keyN] for the --some-param option.

Be sure to list the .build_config.json in the action's inputs.

For a concrete example, consider the following GN fragment:

# From //ui/android/BUILD.gn:
android_resources("ui_java_resources") {
  custom_package = "org.chromium.ui"
  resource_dirs = [ "java/res" ]
  deps = [
    ":ui_strings_grd",
  ]
}

This will end up generating:

$CHROMIUM_OUTPUT_DIR/gen/ui/android/ui_java_resources.params.json:

{
  "chromium_code": true,
  "deps_configs": [
    "gen/ui/android/ui_strings_grd.build_config.json",
    "gen/third_party/android_sdk/android_sdk_java.build_config.json"
  ],
  "gn_target": "//ui/android:ui_java_resources",
  "res_sources_path": "gen/ui/android/ui_java_resources.res.sources",
  "resources_zip": "obj/ui/android/ui_java_resources.resources.zip",
  "rtxt_path": "gen/ui/android/ui_java_resources_R.txt",
  "type": "android_resources"
}

$CHROMIUM_OUTPUT_DIR/gen/ui/android/ui_java_resources.build_config.json:

{
  "dependency_zip_overlays": [],
  "dependency_zips": [
    "obj/ui/android/ui_strings_grd.resources.zip"
  ],
  "extra_package_names": []
}