android_app

android_app compiles sources and Android resources into an Android application package `.apk` file.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 aapt_include_all_resources bool, include all resource configurations, not just the product-configured ones.
 aaptflags list of strings, flags passed to aapt when creating the apk
 additional_certificates list of strings, Names of extra android_app_certificate modules to sign the apk with in the form ":module".
 additional_manifests list of strings, paths to additional manifest files to merge with main manifest.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 asset_dirs list of strings, list of directories relative to the Blueprints file containing assets. Defaults to ["assets"] if a directory called assets exists. Set to [] to disable the default.
 certificate string, The name of a certificate in the default certificate directory, blank to use the default product certificate, or an android_app_certificate module name in the form ":module".
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dont_merge_manifests bool, do not include AndroidManifest from dependent libraries
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 embed_notices bool, If set, find and merge all NOTICE files that this module and its dependencies have and store it in the APK as an asset.
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 enforce_uses_libs bool, If true, the list of uses_libs and optional_uses_libs modules must match the AndroidManifest.xml file. Defaults to true if either uses_libs or optional_uses_libs is set. Will unconditionally default to true in the future.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 export_package_resources bool, If set, create package-export.apk, which other packages can use to get PRODUCT-agnostic resource data like IDs and type definitions.
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 jni_libs list of strings, list of native libraries that will be provided in or alongside the resulting jar
 jni_uses_platform_apis bool, if true, use JNI libraries that link against platform APIs even if this module sets sdk_version.
 jni_uses_sdk_apis bool, if true, use JNI libraries that link against SDK APIs even if this module does not set sdk_version.
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 logging_parent string, the logging parent of this app.
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default. Default: true
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests. Default: true
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 optional_uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file with required=false.
 overrides list of strings, Names of modules to be overridden. Listed modules can only be other binaries (in Make or Soong). This does not completely prevent installation of the overridden binaries, but if both binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed from PRODUCT_PACKAGES.
 owner string, vendor who owns this module
 package_name string, the package name of this app. The package name in the manifest file is used if one was not given.
 package_splits list of strings, list of resource labels to generate individual resource packages
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 privileged bool, Specifies that this app should be installed to the priv-app directory, where the system will grant it additional privileges not available to normal apps.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 output_params list of strings, List of extra options that will be passed to the proto generator.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 resource_dirs list of strings, list of directories relative to the Blueprints file containing Android resources. Defaults to ["res"] if a directory called res exists. Set to [] to disable the default.
 resource_zips list of strings, list of zip files containing Android resources.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 stl string, STL library to use for JNI libraries.
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 updatable bool, Whether this app is considered mainline updatable or not. When set to true, this will enforce additional rules to make sure an app can safely be updated. Default is false. Prefer using other specific properties if build behaviour must be changed; avoid using this flag for anything but neverallow rules (unless the behaviour change is invisible to owners).
 use_embedded_dex bool, Store dex files uncompressed in the APK and set the android:useEmbeddedDex="true" manifest attribute so that they are used from inside the APK at runtime.
 use_embedded_native_libs bool, Store native libraries uncompressed in the APK and set the android:extractNativeLibs="false" manifest flag so that they are used from inside the APK at runtime. Defaults to true for android_test modules unless sdk_version or min_sdk_version is set to a version that doesn't support it (<23), defaults to true for android_app modules that are embedded to APEXes, defaults to false for other module types where the native libraries are generally preinstalled outside the APK.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file.
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_app_certificate

android_app_certificate modules can be referenced by the certificates property of android_app modules to select the signing key.
 name string, The name of the module. Must be unique across all modules.
 certificate string, Name of the certificate files. Extensions .x509.pem and .pk8 will be added to the name.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_app_import

android_app_import imports a prebuilt apk with additional processing specified in the module. DPI-specific apk source files can be specified using dpi_variants. Example:

    android_app_import {
        name: "example_import",
        apk: "prebuilts/example.apk",
        dpi_variants: {
            mdpi: {
                apk: "prebuilts/example_mdpi.apk",
            },
            xhdpi: {
                apk: "prebuilts/example_xhdpi.apk",
            },
        },
        certificate: "PRESIGNED",
    }

 name string, The name of the module. Must be unique across all modules.
 apk string, A prebuilt apk to import
 arch interface
 certificate string, The name of a certificate in the default certificate directory or an android_app_certificate module name in the form ":module". Should be empty if presigned or default_dev_cert is set.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 default_dev_cert bool, Sign with the default system dev certificate. Must be used judiciously. Most imported apps need to either specify a specific certificate or be presigned.
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 enforce_uses_libs bool, If true, the list of uses_libs and optional_uses_libs modules must match the AndroidManifest.xml file. Defaults to true if either uses_libs or optional_uses_libs is set. Will unconditionally default to true in the future.
 filename string, Optional name for the installed app. If unspecified, it is derived from the module name.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 optional_uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file with required=false.
 overrides list of strings, Names of modules to be overridden. Listed modules can only be other binaries (in Make or Soong). This does not completely prevent installation of the overridden binaries, but if both binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed from PRODUCT_PACKAGES.
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 presigned bool, Set this flag to true if the prebuilt apk is already signed. The certificate property must not be set for presigned modules.
 privileged bool, Specifies that this app should be installed to the priv-app directory, where the system will grant it additional privileges not available to normal apps.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_app_set

android_app_set extracts a set of APKs based on the target device configuration and installs this set as "split APKs". The extracted set always contains 'master' APK whose name is _module_name_.apk and every split APK matching target device. The extraction of the density-specific splits depends on PRODUCT_AAPT_PREBUILT_DPI variable. If present (its value should be a list density names: LDPI, MDPI, HDPI, etc.), only listed splits will be extracted. Otherwise all density-specific splits will be extracted.
 name string, The name of the module. Must be unique across all modules.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 overrides list of strings, Names of modules to be overridden. Listed modules can only be other apps

	(in Make or Soong).

 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 prerelease bool, APKs in this set use prerelease SDK version
 privileged bool, Specifies that this app should be installed to the priv-app directory, where the system will grant it additional privileges not available to normal apps.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 set string, APK Set path
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_library

android_library builds and links sources into a `.jar` file for the device along with Android resources. An android_library has a single variant that produces a `.jar` file containing `.class` files that were compiled against the device bootclasspath, along with a `package-res.apk` file containing Android resources compiled with aapt2. This module is not suitable for installing on a device, but can be used as a `static_libs` dependency of an android_app module.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 aapt_include_all_resources bool, include all resource configurations, not just the product-configured ones.
 aaptflags list of strings, flags passed to aapt when creating the apk
 additional_manifests list of strings, paths to additional manifest files to merge with main manifest.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 asset_dirs list of strings, list of directories relative to the Blueprints file containing assets. Defaults to ["assets"] if a directory called assets exists. Set to [] to disable the default.
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dont_merge_manifests bool, do not include AndroidManifest from dependent libraries
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable.
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 manifest string, path to AndroidManifest.xml. If unset, defaults to "AndroidManifest.xml".
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 resource_dirs list of strings, list of directories relative to the Blueprints file containing Android resources. Defaults to ["res"] if a directory called res exists. Set to [] to disable the default.
 resource_zips list of strings, list of zip files containing Android resources.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_library_import

android_library_import imports an `.aar` file into the build graph as if it was built with android_library. This module is not suitable for installing on a device, but can be used as a `static_libs` dependency of an android_app module.
 name string, The name of the module. Must be unique across all modules.
 aars list of strings
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 jetifier bool, if set to true, run Jetifier against .aar file. Defaults to false.
 libs list of strings
 licenses list of strings, Names of the licenses that apply to this module.
 min_sdk_version string
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_version string
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_libs list of strings
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_robolectric_test

An android_robolectric_test module compiles tests against the Robolectric framework that can run on the local host instead of on a device. It also generates a rule with the name of the module prefixed with "Run" that can be used to run the tests. Running the tests with build rule will eventually be deprecated and replaced with atest. The test runner considers any file listed in srcs whose name ends with Test.java to be a test class, unless it is named BaseRobolectricTest.java. The path to the each source file must exactly match the package name, or match the package name when the prefix "src/" is removed.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 arch interface
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 coverage_libs list of strings, Additional libraries for which coverage data should be generated
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable.
 instrumentation_for string, The name of the android_app module that the tests will run against.
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
test_options
 timeout int64, Timeout in seconds when running the tests.
 shards int64, Number of shards to use when running the tests.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_test

android_test compiles test sources and Android resources into an Android application package `.apk` file and creates an `AndroidTest.xml` file to allow running the test with `atest` or a `TEST_MAPPING` file.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 aapt_include_all_resources bool, include all resource configurations, not just the product-configured ones.
 aaptflags list of strings, flags passed to aapt when creating the apk
 additional_certificates list of strings, Names of extra android_app_certificate modules to sign the apk with in the form ":module".
 additional_manifests list of strings, paths to additional manifest files to merge with main manifest.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 arch interface
 asset_dirs list of strings, list of directories relative to the Blueprints file containing assets. Defaults to ["assets"] if a directory called assets exists. Set to [] to disable the default.
 auto_gen_config bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml doesn't exist next to the Android.bp, this attribute doesn't need to be set to true explicitly.
 certificate string, The name of a certificate in the default certificate directory, blank to use the default product certificate, or an android_app_certificate module name in the form ":module".
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 data list of strings, list of files or filegroup modules that provide data that should be installed alongside the test
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dont_merge_manifests bool, do not include AndroidManifest from dependent libraries
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 embed_notices bool, If set, find and merge all NOTICE files that this module and its dependencies have and store it in the APK as an asset.
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 enforce_uses_libs bool, If true, the list of uses_libs and optional_uses_libs modules must match the AndroidManifest.xml file. Defaults to true if either uses_libs or optional_uses_libs is set. Will unconditionally default to true in the future.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 export_package_resources bool, If set, create package-export.apk, which other packages can use to get PRODUCT-agnostic resource data like IDs and type definitions.
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
 instrumentation_for string
 instrumentation_target_package string, if specified, the instrumentation target package name in the manifest is overwritten by it.
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 jni_libs list of strings, list of native libraries that will be provided in or alongside the resulting jar
 jni_uses_platform_apis bool, if true, use JNI libraries that link against platform APIs even if this module sets sdk_version.
 jni_uses_sdk_apis bool, if true, use JNI libraries that link against SDK APIs even if this module does not set sdk_version.
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 logging_parent string, the logging parent of this app.
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default. Default: true
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 optional_uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file with required=false.
 overrides list of strings, Names of modules to be overridden. Listed modules can only be other binaries (in Make or Soong). This does not completely prevent installation of the overridden binaries, but if both binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed from PRODUCT_PACKAGES.
 owner string, vendor who owns this module
 package_name string, the package name of this app. The package name in the manifest file is used if one was not given.
 package_splits list of strings, list of resource labels to generate individual resource packages
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 privileged bool, Specifies that this app should be installed to the priv-app directory, where the system will grant it additional privileges not available to normal apps.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 resource_dirs list of strings, list of directories relative to the Blueprints file containing Android resources. Defaults to ["res"] if a directory called res exists. Set to [] to disable the default.
 resource_zips list of strings, list of zip files containing Android resources.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 stl string, STL library to use for JNI libraries.
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 test_config string, the name of the test configuration (for example "AndroidTest.xml") that should be installed with the module.
 test_config_template string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that should be installed with the module.
 test_mainline_modules list of strings, Add parameterized mainline modules to auto generated test config. The options will be handled by TradeFed to do downloading and installing the specified modules on the device.
 test_suites list of strings, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 updatable bool, Whether this app is considered mainline updatable or not. When set to true, this will enforce additional rules to make sure an app can safely be updated. Default is false. Prefer using other specific properties if build behaviour must be changed; avoid using this flag for anything but neverallow rules (unless the behaviour change is invisible to owners).
 use_embedded_dex bool, Store dex files uncompressed in the APK and set the android:useEmbeddedDex="true" manifest attribute so that they are used from inside the APK at runtime.
 use_embedded_native_libs bool, Store native libraries uncompressed in the APK and set the android:extractNativeLibs="false" manifest flag so that they are used from inside the APK at runtime. Defaults to true for android_test modules unless sdk_version or min_sdk_version is set to a version that doesn't support it (<23), defaults to true for android_app modules that are embedded to APEXes, defaults to false for other module types where the native libraries are generally preinstalled outside the APK. Default: true
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file.
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_test_helper_app

android_test_helper_app compiles sources and Android resources into an Android application package `.apk` file that will be used by tests, but does not produce an `AndroidTest.xml` file so the module will not be run directly as a test.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 aapt_include_all_resources bool, include all resource configurations, not just the product-configured ones.
 aaptflags list of strings, flags passed to aapt when creating the apk
 additional_certificates list of strings, Names of extra android_app_certificate modules to sign the apk with in the form ":module".
 additional_manifests list of strings, paths to additional manifest files to merge with main manifest.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 asset_dirs list of strings, list of directories relative to the Blueprints file containing assets. Defaults to ["assets"] if a directory called assets exists. Set to [] to disable the default.
 auto_gen_config bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml doesn't exist next to the Android.bp, this attribute doesn't need to be set to true explicitly.
 certificate string, The name of a certificate in the default certificate directory, blank to use the default product certificate, or an android_app_certificate module name in the form ":module".
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dont_merge_manifests bool, do not include AndroidManifest from dependent libraries
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 embed_notices bool, If set, find and merge all NOTICE files that this module and its dependencies have and store it in the APK as an asset.
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 enforce_uses_libs bool, If true, the list of uses_libs and optional_uses_libs modules must match the AndroidManifest.xml file. Defaults to true if either uses_libs or optional_uses_libs is set. Will unconditionally default to true in the future.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 export_package_resources bool, If set, create package-export.apk, which other packages can use to get PRODUCT-agnostic resource data like IDs and type definitions.
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 jni_libs list of strings, list of native libraries that will be provided in or alongside the resulting jar
 jni_uses_platform_apis bool, if true, use JNI libraries that link against platform APIs even if this module sets sdk_version.
 jni_uses_sdk_apis bool, if true, use JNI libraries that link against SDK APIs even if this module does not set sdk_version.
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 logging_parent string, the logging parent of this app.
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default. Default: true
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 optional_uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file with required=false.
 overrides list of strings, Names of modules to be overridden. Listed modules can only be other binaries (in Make or Soong). This does not completely prevent installation of the overridden binaries, but if both binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed from PRODUCT_PACKAGES.
 owner string, vendor who owns this module
 package_name string, the package name of this app. The package name in the manifest file is used if one was not given.
 package_splits list of strings, list of resource labels to generate individual resource packages
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 privileged bool, Specifies that this app should be installed to the priv-app directory, where the system will grant it additional privileges not available to normal apps.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 resource_dirs list of strings, list of directories relative to the Blueprints file containing Android resources. Defaults to ["res"] if a directory called res exists. Set to [] to disable the default.
 resource_zips list of strings, list of zip files containing Android resources.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 stl string, STL library to use for JNI libraries.
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 test_suites list of strings, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 updatable bool, Whether this app is considered mainline updatable or not. When set to true, this will enforce additional rules to make sure an app can safely be updated. Default is false. Prefer using other specific properties if build behaviour must be changed; avoid using this flag for anything but neverallow rules (unless the behaviour change is invisible to owners).
 use_embedded_dex bool, Store dex files uncompressed in the APK and set the android:useEmbeddedDex="true" manifest attribute so that they are used from inside the APK at runtime.
 use_embedded_native_libs bool, Store native libraries uncompressed in the APK and set the android:extractNativeLibs="false" manifest flag so that they are used from inside the APK at runtime. Defaults to true for android_test modules unless sdk_version or min_sdk_version is set to a version that doesn't support it (<23), defaults to true for android_app modules that are embedded to APEXes, defaults to false for other module types where the native libraries are generally preinstalled outside the APK. Default: true
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file.
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

android_test_import

android_test_import imports a prebuilt test apk with additional processing specified in the module. DPI or arch variant configurations can be made as with android_app_import.
 name string, The name of the module. Must be unique across all modules.
 apk string, A prebuilt apk to import
 arch interface
 auto_gen_config bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml doesn't exist next to the Android.bp, this attribute doesn't need to be set to true explicitly.
 certificate string, The name of a certificate in the default certificate directory or an android_app_certificate module name in the form ":module". Should be empty if presigned or default_dev_cert is set.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 data list of strings, list of files or filegroup modules that provide data that should be installed alongside the test
 default_dev_cert bool, Sign with the default system dev certificate. Must be used judiciously. Most imported apps need to either specify a specific certificate or be presigned.
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 enforce_uses_libs bool, If true, the list of uses_libs and optional_uses_libs modules must match the AndroidManifest.xml file. Defaults to true if either uses_libs or optional_uses_libs is set. Will unconditionally default to true in the future.
 filename string, Optional name for the installed app. If unspecified, it is derived from the module name.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 optional_uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file with required=false.
 overrides list of strings, Names of modules to be overridden. Listed modules can only be other binaries (in Make or Soong). This does not completely prevent installation of the overridden binaries, but if both binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed from PRODUCT_PACKAGES.
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 preprocessed bool, Whether the prebuilt apk can be installed without additional processing. Default is false.
 presigned bool, Set this flag to true if the prebuilt apk is already signed. The certificate property must not be set for presigned modules.
 privileged bool, Specifies that this app should be installed to the priv-app directory, where the system will grant it additional privileges not available to normal apps.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 test_config string, the name of the test configuration (for example "AndroidTest.xml") that should be installed with the module.
 test_config_template string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that should be installed with the module.
 test_mainline_modules list of strings, Add parameterized mainline modules to auto generated test config. The options will be handled by TradeFed to do downloading and installing the specified modules on the device.
 test_suites list of strings, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
 uses_libs list of strings, A list of shared library modules that will be listed in uses-library tags in the AndroidManifest.xml file.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

dex_import

dex_import imports a `.jar` file containing classes.dex files. A dex_import module cannot be used as a dependency of a java_* or android_* module, it can only be installed to the device.
 name string, The name of the module. Must be unique across all modules.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 jars list of strings
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

doc_defaults

 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 api_filename string, the generated public API filename by Doclava.
 arch interface
 arg_files list of strings, local files that are used within user customized droiddoc options.
 args string, user customized droiddoc args. Available variables for substitution:

 $(location <label>): the path to the arg_files with name <label>
 $$: a literal $

check_api
 last_released ApiToCheck
 current ApiToCheck
 ignore_missing_latest_api bool, do not perform API check against Last_released, in the case that both two specified API files by Last_released are modules which don't exist.
 compat_config string, Compat config XML. Generates compat change documentation if set.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 create_stubs bool, if set to false, don't allow droiddoc to generate stubs source files. Defaults to true.
 custom_template string, directory relative to top of the source tree that contains doc templates files.
 defaults list of strings
 defaults_visibility list of strings, Controls the visibility of the defaults module itself.
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dokka_enabled bool, if set to true, generate docs through Dokka instead of Doclava.
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files filegroup or genrule can be included within this property.
 filter_packages list of strings, list of package names that should actually be used. If this property is left unspecified, all the sources from the srcs property is used.
 hdf list of strings, set a value in the Clearsilver hdf namespace.
 host_required list of strings, names of other modules to install on host if this module is installed
 html_dirs list of strings, directories under current module source which contains html/jd files.
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
 java_version string, If not blank, set the java version passed to javadoc as -source
 knowntags list of strings, a list of files under current module source dir which contains known tags in Java sources. filegroup or genrule can be included within this property.
 libs list of strings, list of java libraries that will be in the classpath.
 licenses list of strings, Names of the licenses that apply to this module.
 local_sourcepaths list of strings, list of directories rooted at the Android.bp file that will be added to the search paths for finding source files when passing package names.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files used in args that will be generated
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proofread_file string, proofread file contains all of the text content of the javadocs concatenated into one file, suitable for spell-checking and other goodness.
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 removed_api_filename string, the generated removed API filename by Doclava.
 removed_dex_api_filename string, the generated removed Dex API filename by Doclava.
 required list of strings, names of other modules to install if this module is installed
 resourcesdir string, directory under current module source that provide additional resources (images).
 resourcesoutdir string, resources output directory under out/soong/.intermediates.
 sandbox bool, If set, metalava is sandboxed to only read files explicitly specified on the command line. Defaults to false.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_doc_index_redirect string, index.html under current module will be copied to docs out dir, if not null.
 static_doc_properties string, source.properties under current module will be copied to docs out dir, if not null.
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath. Defaults to "none"
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 todo_file string, a todo file lists the program elements that are missing documentation. At some point, this might be improved to show more warnings.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.
 write_sdk_values bool, if set to true, collect the values used by the Dev tools and write them in files packaged with the SDK. Defaults to false.

droiddoc

droiddoc converts .java source files to documentation using doclava or dokka.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 api_filename string, the generated public API filename by Doclava.
 arch interface
 arg_files list of strings, local files that are used within user customized droiddoc options.
 args string, user customized droiddoc args. Available variables for substitution:

 $(location <label>): the path to the arg_files with name <label>
 $$: a literal $

check_api
 last_released ApiToCheck
 current ApiToCheck
 ignore_missing_latest_api bool, do not perform API check against Last_released, in the case that both two specified API files by Last_released are modules which don't exist.
 compat_config string, Compat config XML. Generates compat change documentation if set.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 create_stubs bool, if set to false, don't allow droiddoc to generate stubs source files. Defaults to true.
 custom_template string, directory relative to top of the source tree that contains doc templates files.
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dokka_enabled bool, if set to true, generate docs through Dokka instead of Doclava.
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files filegroup or genrule can be included within this property.
 filter_packages list of strings, list of package names that should actually be used. If this property is left unspecified, all the sources from the srcs property is used.
 hdf list of strings, set a value in the Clearsilver hdf namespace.
 host_required list of strings, names of other modules to install on host if this module is installed
 html_dirs list of strings, directories under current module source which contains html/jd files.
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
 java_version string, If not blank, set the java version passed to javadoc as -source
 knowntags list of strings, a list of files under current module source dir which contains known tags in Java sources. filegroup or genrule can be included within this property.
 libs list of strings, list of java libraries that will be in the classpath.
 licenses list of strings, Names of the licenses that apply to this module.
 local_sourcepaths list of strings, list of directories rooted at the Android.bp file that will be added to the search paths for finding source files when passing package names.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files used in args that will be generated
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proofread_file string, proofread file contains all of the text content of the javadocs concatenated into one file, suitable for spell-checking and other goodness.
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 removed_api_filename string, the generated removed API filename by Doclava.
 removed_dex_api_filename string, the generated removed Dex API filename by Doclava.
 required list of strings, names of other modules to install if this module is installed
 resourcesdir string, directory under current module source that provide additional resources (images).
 resourcesoutdir string, resources output directory under out/soong/.intermediates.
 sandbox bool, If set, metalava is sandboxed to only read files explicitly specified on the command line. Defaults to false.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_doc_index_redirect string, index.html under current module will be copied to docs out dir, if not null.
 static_doc_properties string, source.properties under current module will be copied to docs out dir, if not null.
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath. Defaults to "none"
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 todo_file string, a todo file lists the program elements that are missing documentation. At some point, this might be improved to show more warnings.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.
 write_sdk_values bool, if set to true, collect the values used by the Dev tools and write them in files packaged with the SDK. Defaults to false.

droiddoc_exported_dir

droiddoc_exported_dir exports a directory of html templates or nullability annotations for use by doclava.
 name string, The name of the module. Must be unique across all modules.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 path string, path to the directory containing Droiddoc related files.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

droiddoc_host

droiddoc_host converts .java source files to documentation using doclava or dokka.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 api_filename string, the generated public API filename by Doclava.
 arch interface
 arg_files list of strings, local files that are used within user customized droiddoc options.
 args string, user customized droiddoc args. Available variables for substitution:

 $(location <label>): the path to the arg_files with name <label>
 $$: a literal $

check_api
 last_released ApiToCheck
 current ApiToCheck
 ignore_missing_latest_api bool, do not perform API check against Last_released, in the case that both two specified API files by Last_released are modules which don't exist.
 compat_config string, Compat config XML. Generates compat change documentation if set.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 create_stubs bool, if set to false, don't allow droiddoc to generate stubs source files. Defaults to true.
 custom_template string, directory relative to top of the source tree that contains doc templates files.
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dokka_enabled bool, if set to true, generate docs through Dokka instead of Doclava.
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files filegroup or genrule can be included within this property.
 filter_packages list of strings, list of package names that should actually be used. If this property is left unspecified, all the sources from the srcs property is used.
 hdf list of strings, set a value in the Clearsilver hdf namespace.
 host_required list of strings, names of other modules to install on host if this module is installed
 html_dirs list of strings, directories under current module source which contains html/jd files.
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
 java_version string, If not blank, set the java version passed to javadoc as -source
 knowntags list of strings, a list of files under current module source dir which contains known tags in Java sources. filegroup or genrule can be included within this property.
 libs list of strings, list of java libraries that will be in the classpath.
 licenses list of strings, Names of the licenses that apply to this module.
 local_sourcepaths list of strings, list of directories rooted at the Android.bp file that will be added to the search paths for finding source files when passing package names.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files used in args that will be generated
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proofread_file string, proofread file contains all of the text content of the javadocs concatenated into one file, suitable for spell-checking and other goodness.
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 removed_api_filename string, the generated removed API filename by Doclava.
 removed_dex_api_filename string, the generated removed Dex API filename by Doclava.
 required list of strings, names of other modules to install if this module is installed
 resourcesdir string, directory under current module source that provide additional resources (images).
 resourcesoutdir string, resources output directory under out/soong/.intermediates.
 sandbox bool, If set, metalava is sandboxed to only read files explicitly specified on the command line. Defaults to false.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_doc_index_redirect string, index.html under current module will be copied to docs out dir, if not null.
 static_doc_properties string, source.properties under current module will be copied to docs out dir, if not null.
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath. Defaults to "none"
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 todo_file string, a todo file lists the program elements that are missing documentation. At some point, this might be improved to show more warnings.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.
 write_sdk_values bool, if set to true, collect the values used by the Dev tools and write them in files packaged with the SDK. Defaults to false.

droidstubs

droidstubs passes sources files through Metalava to generate stub .java files that only contain the API to be documented, filtering out hidden classes and methods. The resulting .java files are intended to be passed to a droiddoc module to generate documentation.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 annotations_enabled bool, is set to true, Metalava will allow framework SDK to contain annotations.
 api_filename string, the generated public API filename by Metalava.
 api_levels_annotations_dirs list of strings, the dirs which Metalava extracts API levels annotations from.
 api_levels_annotations_enabled bool, is set to true, Metalava will allow framework SDK to contain API levels annotations.
 api_levels_jar_filename string, the filename which Metalava extracts API levels annotations from. Defaults to android.jar.
 arch interface
 arg_files list of strings, local files that are used within user customized droiddoc options.
 args string, user customized droiddoc args. Available variables for substitution:

 $(location <label>): the path to the arg_files with name <label>
 $$: a literal $

check_api
 last_released ApiToCheck
 current ApiToCheck
 ignore_missing_latest_api bool, The java_sdk_library module generates references to modules (i.e. filegroups) from which information about the latest API version can be obtained. As those modules may not exist (e.g. because a previous version has not been released) it sets ignore_missing_latest_api=true on the droidstubs modules it creates so that droidstubs can ignore those references if the modules do not yet exist. If true then this will ignore module references for modules that do not exist in properties that supply the previous version of the API. There are two sets of those: * Api_file, Removed_api_file in check_api.last_released * New_since in check_api.api_lint.new_since The first two must be set as a pair, so either they should both exist or neither should exist - in which case when this property is true they are ignored. If one exists and the other does not then it is an error.
api_lint
 enabled bool
 new_since string, If set, performs api_lint on any new APIs not found in the given signature file
 baseline_file string, If not blank, path to the baseline txt file for approved API lint violations.
 check_nullability_warnings string, a file containing expected warnings produced by validation of nullability annotations.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 create_doc_stubs bool, if set to true, allow Metalava to generate doc_stubs source files. Defaults to false.
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files filegroup or genrule can be included within this property.
 filter_packages list of strings, list of package names that should actually be used. If this property is left unspecified, all the sources from the srcs property is used.
 generate_stubs bool, if set to false then do not write out stubs. Defaults to true. TODO(b/146727827): Remove capability when we do not need to generate stubs and API separately.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
 java_version string, If not blank, set the java version passed to javadoc as -source
 jdiff_enabled bool, If set to true, .xml based public API file will be also generated, and JDiff tool will be invoked to genreate javadoc files. Defaults to false.
 libs list of strings, list of java libraries that will be in the classpath.
 licenses list of strings, Names of the licenses that apply to this module.
 local_sourcepaths list of strings, list of directories rooted at the Android.bp file that will be added to the search paths for finding source files when passing package names.
 merge_annotations_dirs list of strings, a list of top-level directories containing files to merge qualifier annotations (i.e. those intended to be included in the stubs written) from.
 merge_inclusion_annotations_dirs list of strings, a list of top-level directories containing Java stub files to merge show/hide annotations from.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files used in args that will be generated
 owner string, vendor who owns this module
 previous_api string, user can specify the version of previous released API file in order to do compatibility check.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 removed_api_filename string, the generated removed API filename by Metalava.
 removed_dex_api_filename string, the generated removed Dex API filename by Metalava.
 required list of strings, names of other modules to install if this module is installed
 sandbox bool, If set, metalava is sandboxed to only read files explicitly specified on the command line. Defaults to false.
 sdk_member_name string, Name of the module that this sdk member is representing
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath. Defaults to "none"
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 validate_nullability_from_list string, a file containing a list of classes to do nullability validation for.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.
 write_sdk_values bool, if set to true, collect the values used by the Dev tools and write them in files packaged with the SDK. Defaults to false.

droidstubs_host

droidstubs_host passes sources files through Metalava to generate stub .java files that only contain the API to be documented, filtering out hidden classes and methods. The resulting .java files are intended to be passed to a droiddoc_host module to generate documentation. Use a droidstubs_host instead of a droidstubs module when symbols needed by the source files are provided by java_library_host modules.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 annotations_enabled bool, is set to true, Metalava will allow framework SDK to contain annotations.
 api_filename string, the generated public API filename by Metalava.
 api_levels_annotations_dirs list of strings, the dirs which Metalava extracts API levels annotations from.
 api_levels_annotations_enabled bool, is set to true, Metalava will allow framework SDK to contain API levels annotations.
 api_levels_jar_filename string, the filename which Metalava extracts API levels annotations from. Defaults to android.jar.
 arch interface
 arg_files list of strings, local files that are used within user customized droiddoc options.
 args string, user customized droiddoc args. Available variables for substitution:

 $(location <label>): the path to the arg_files with name <label>
 $$: a literal $

check_api
 last_released ApiToCheck
 current ApiToCheck
 ignore_missing_latest_api bool, The java_sdk_library module generates references to modules (i.e. filegroups) from which information about the latest API version can be obtained. As those modules may not exist (e.g. because a previous version has not been released) it sets ignore_missing_latest_api=true on the droidstubs modules it creates so that droidstubs can ignore those references if the modules do not yet exist. If true then this will ignore module references for modules that do not exist in properties that supply the previous version of the API. There are two sets of those: * Api_file, Removed_api_file in check_api.last_released * New_since in check_api.api_lint.new_since The first two must be set as a pair, so either they should both exist or neither should exist - in which case when this property is true they are ignored. If one exists and the other does not then it is an error.
api_lint
 enabled bool
 new_since string, If set, performs api_lint on any new APIs not found in the given signature file
 baseline_file string, If not blank, path to the baseline txt file for approved API lint violations.
 check_nullability_warnings string, a file containing expected warnings produced by validation of nullability annotations.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 create_doc_stubs bool, if set to true, allow Metalava to generate doc_stubs source files. Defaults to false.
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files filegroup or genrule can be included within this property.
 filter_packages list of strings, list of package names that should actually be used. If this property is left unspecified, all the sources from the srcs property is used.
 generate_stubs bool, if set to false then do not write out stubs. Defaults to true. TODO(b/146727827): Remove capability when we do not need to generate stubs and API separately.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
 java_version string, If not blank, set the java version passed to javadoc as -source
 jdiff_enabled bool, If set to true, .xml based public API file will be also generated, and JDiff tool will be invoked to genreate javadoc files. Defaults to false.
 libs list of strings, list of java libraries that will be in the classpath.
 licenses list of strings, Names of the licenses that apply to this module.
 local_sourcepaths list of strings, list of directories rooted at the Android.bp file that will be added to the search paths for finding source files when passing package names.
 merge_annotations_dirs list of strings, a list of top-level directories containing files to merge qualifier annotations (i.e. those intended to be included in the stubs written) from.
 merge_inclusion_annotations_dirs list of strings, a list of top-level directories containing Java stub files to merge show/hide annotations from.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files used in args that will be generated
 owner string, vendor who owns this module
 previous_api string, user can specify the version of previous released API file in order to do compatibility check.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 removed_api_filename string, the generated removed API filename by Metalava.
 removed_dex_api_filename string, the generated removed Dex API filename by Metalava.
 required list of strings, names of other modules to install if this module is installed
 sandbox bool, If set, metalava is sandboxed to only read files explicitly specified on the command line. Defaults to false.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath. Defaults to "none"
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 validate_nullability_from_list string, a file containing a list of classes to do nullability validation for.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.
 write_sdk_values bool, if set to true, collect the values used by the Dev tools and write them in files packaged with the SDK. Defaults to false.

global_compat_config

global_compat_config provides access to the merged compat config xml file generated by the build.
 name string, The name of the module. Must be unique across all modules.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 filename string, name of the file into which the metadata will be copied.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

hiddenapi_flags

hiddenapi-flags provides access to the hiddenapi-flags.csv file generated during the build.
 name string, The name of the module. Must be unique across all modules.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 filename string, name of the file into which the flags will be copied.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_binary

java_binary builds a `.jar` file and a shell script that executes it for the device, and possibly for the host as well. By default, a java_binary has a single variant that produces a `.jar` file containing `classes.dex` files that were compiled against the device bootclasspath. Specifying `host_supported: true` will produce two variants, one compiled against the device bootclasspath and one compiled against the host bootclasspath.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 arch interface
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 main_class string, Name of the class containing main to be inserted into the manifest as Main-Class.
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.
 wrapper string, installable script to execute the resulting jar

java_binary_host

java_binary_host builds a `.jar` file and a shell script that executes it for the host. A java_binary_host has a single variant that produces a `.jar` file containing `.class` files that were compiled against the host bootclasspath.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 main_class string, Name of the class containing main to be inserted into the manifest as Main-Class.
 manifest string, manifest file to be included in resulting jar
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 output_params list of strings, List of extra options that will be passed to the proto generator.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.
 wrapper string, installable script to execute the resulting jar

java_defaults

 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 aapt_include_all_resources bool, include all resource configurations, not just the product-configured ones.
 aaptflags list of strings, flags passed to aapt when creating the apk
 aars list of strings
 additional_certificates list of strings, Names of extra android_app_certificate modules to sign the apk with in the form ":module".
 additional_manifests list of strings, paths to additional manifest files to merge with main manifest.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 annotations_enabled bool, is set to true, Metalava will allow framework SDK to contain annotations.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 api_dir string, the relative path to the directory containing the api specification files. Defaults to "api".
api_lint
Properties related to api linting.
 enabled bool, Enable api linting.
 api_only bool, Determines whether a runtime implementation library is built; defaults to false. If true then it also prevents the module from being used as a shared module, i.e. it is as is shared_library: false, was set.
 api_packages list of strings, list of package names that will be documented and publicized as API. This allows the API to be restricted to a subset of the source files provided. If this is unspecified then all the source files will be treated as being part of the API.
 arch interface
 asset_dirs list of strings, list of directories relative to the Blueprints file containing assets. Defaults to ["assets"] if a directory called assets exists. Set to [] to disable the default.
 certificate string, the name of a certificate in the default certificate directory or an android_app_certificate module name in the form ":module".
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 core_lib bool, If set to true, the path of dist files is apistubs/core. Defaults to false.
 default_to_stubs bool, Determines if the stubs are preferred over the implementation library for linking, even when the client doesn't specify sdk_version. When this is set to true, such clients are provided with the widest API surface that this lib provides. Note however that this option doesn't affect the clients that are in the same APEX as this library. In that case, the clients are always linked with the implementation library. Default is false.
 defaults list of strings
 defaults_visibility list of strings, Controls the visibility of the defaults module itself.
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dont_merge_manifests bool, do not include AndroidManifest from dependent libraries
 droiddoc_option_files list of strings, local files that are used within user customized droiddoc options.
 droiddoc_options list of strings, additional droiddoc options Available variables for substitution:

 $(location <label>): the path to the droiddoc_option_files with name <label>

 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 embed_notices bool, If set, find and merge all NOTICE files that this module and its dependencies have and store it in the APK as an asset.
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_dirs list of strings, List of directories to remove from the jar file(s)
 exclude_files list of strings, List of files to remove from the jar file(s)
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 export_package_resources bool, If set, create package-export.apk, which other packages can use to get PRODUCT-agnostic resource data like IDs and type definitions.
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 hidden_api_packages list of strings, list of package names that must be hidden from the API
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 impl_library_visibility list of strings, Visibility for impl library module. If not specified then defaults to the visibility property.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool
 instrumentation_for string
 instrumentation_target_package string, if specified, the instrumentation target package name in the manifest is overwritten by it.
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 jars list of strings
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 jetifier bool, if set to true, run Jetifier against .aar file. Defaults to false.
 jni_libs list of strings, list of native libraries that will be provided in or alongside the resulting jar
 jni_uses_platform_apis bool, if true, use JNI libraries that link against platform APIs even if this module sets sdk_version.
 jni_uses_sdk_apis bool, if true, use JNI libraries that link against SDK APIs even if this module does not set sdk_version.
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 logging_parent string, the logging parent of this app.
 manifest string, manifest file to be included in resulting jar
 merge_annotations_dirs list of strings, a list of top-level directories containing files to merge qualifier annotations (i.e. those intended to be included in the stubs written) from.
 merge_inclusion_annotations_dirs list of strings, a list of top-level directories containing Java stub files to merge show/hide annotations from.
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 module_lib ApiScopeProperties, The properties specific to the module-lib api scope Unless explicitly specified by using test.enabled the module-lib api scope is disabled by default.
 multilib interface
 naming_scheme string, The naming scheme to use for the components that this module creates. If not specified then it defaults to "default". The other allowable value is "framework-modules" which matches the scheme currently used by framework modules for the equivalent components represented as separate Soong modules. This is a temporary mechanism to simplify conversion from separate modules for each component that follow a different naming pattern to the default one. TODO(b/155480189) - Remove once naming inconsistencies have been resolved.
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 overrides list of strings, Names of modules to be overridden. Listed modules can only be other binaries (in Make or Soong). This does not completely prevent installation of the overridden binaries, but if both binaries would be installed by default (in PRODUCT_PACKAGES) the other binary will be removed from PRODUCT_PACKAGES.
 owner string, vendor who owns this module
 package_name string, the package name of this app. The package name in the manifest file is used if one was not given.
 package_splits list of strings, list of resource labels to generate individual resource packages
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 privileged bool, Specifies that this app should be installed to the priv-app directory, where the system will grant it additional privileges not available to normal apps.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 public ApiScopeProperties, The properties specific to the public api scope Unless explicitly specified by using public.enabled the public api scope is enabled by default in both legacy and non-legacy mode.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 resource_dirs list of strings, list of directories relative to the Blueprints file containing Android resources. Defaults to ["res"] if a directory called res exists. Set to [] to disable the default.
 resource_libs list of strings, list of android_app modules whose resources are extracted and linked against
 resource_zips list of strings, list of zip files containing Android resources.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 shared_library bool, Specifies whether this module can be used as an Android shared library; defaults to true. An Android shared library is one that can be referenced in a <uses-library> element in an AndroidManifest.xml.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 stl string, STL library to use for JNI libraries.
 stub_only_libs list of strings, List of Java libraries that will be in the classpath when building stubs
 stubs_library_visibility list of strings, Visibility for stubs library modules. If not specified then defaults to the visibility property.
 stubs_source_visibility list of strings, Visibility for stubs source modules. If not specified then defaults to the visibility property.
 system ApiScopeProperties, The properties specific to the system api scope In legacy mode the system api scope is enabled by default when sdk_version is set to something other than "none". In non-legacy mode the system api scope is disabled by default.
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 system_server ApiScopeProperties, The properties specific to the system-server api scope Unless explicitly specified by using test.enabled the module-lib api scope is disabled by default.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 test ApiScopeProperties, The properties specific to the test api scope In legacy mode the test api scope is enabled by default when sdk_version is set to something other than "none". In non-legacy mode the test api scope is disabled by default.
 theme string, optional theme name. If specified, the overlay package will be applied only when the ro.boot.vendor.overlay.theme system property is set to the same value.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 updatable bool, Whether this app is considered mainline updatable or not. When set to true, this will enforce additional rules to make sure an app can safely be updated. Default is false. Prefer using other specific properties if build behaviour must be changed; avoid using this flag for anything but neverallow rules (unless the behaviour change is invisible to owners).
 use_embedded_dex bool, Store dex files uncompressed in the APK and set the android:useEmbeddedDex="true" manifest attribute so that they are used from inside the APK at runtime.
 use_embedded_native_libs bool, Store native libraries uncompressed in the APK and set the android:extractNativeLibs="false" manifest flag so that they are used from inside the APK at runtime. Defaults to true for android_test modules unless sdk_version or min_sdk_version is set to a version that doesn't support it (<23), defaults to true for android_app modules that are embedded to APEXes, defaults to false for other module types where the native libraries are generally preinstalled outside the APK.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_device_for_host

java_device_for_host makes the classes.jar output of a device java_library module available to host java_library modules. It is rarely necessary, and its usage is restricted to a few allowed projects.
 name string, The name of the module. Must be unique across all modules.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 libs list of strings, List of modules whose contents will be visible to modules that depend on this module.
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_genrule

java_genrule is a genrule that can depend on other java_* objects. By default a java_genrule has a single variant that will run against the device variant of its dependencies and produce an output that can be used as an input to a device java rule. Specifying `host_supported: true` will produce two variants, one that uses device dependencie sand one that uses host dependencies. Each variant will run the command. Use a java_genrule instead of a genrule when it needs to depend on or be depended on by other java modules, unless the dependency is for a generated source file. Examples: Use a java_genrule to package generated java resources:

    java_genrule {
    name: "generated_resources",
        tools: [
            "generator",
            "soong_zip",
        ],
        srcs: ["generator_inputs/**/*"],
        out: ["generated_android_icu4j_resources.jar"],
        cmd: "$(location generator) $(in) -o $(genDir) " +
            "&& $(location soong_zip) -o $(out) -C $(genDir)/res -D $(genDir)/res",
    }

    java_library {
        name: "lib_with_generated_resources",
        srcs: ["src/**/*.java"],
        static_libs: ["generated_resources"],
    }

 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of input files
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 arch interface
 cmd string, The command to run on one or more input files. Cmd supports substitution of a few variables (the actual substitution is implemented in GenerateAndroidBuildActions below) Available variables for substitution:

 $(location): the path to the first entry in tools or tool_files
 $(location <label>): the path to the tool, tool_file, input or output with name <label>
 $(in): one or more input files
 $(out): a single output file
 $(depfile): a file to which dependencies will be written, if the depfile property is set to true
 $(genDir): the sandbox directory for this tool; contains $(out)
 $$: a literal $

All files used must be declared as inputs (to ensure proper up-to-date checks). Use "$(in)" directly in Cmd to ensure that all inputs used are declared.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 depfile bool, Enable reading a file containing dependencies in gcc format after the command completes
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, input files to exclude
 export_include_dirs list of strings, List of directories to export generated headers from
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files that will be generated
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 tool_files list of strings, Local file that is used as the tool
 tools list of strings, name of the modules (if any) that produces the host executable. Leave empty for prebuilts or scripts that do not need a module to build them.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_genrule_host

java_genrule_host is a genrule that can depend on other java_* objects. A java_genrule_host has a single variant that will run against the host variant of its dependencies and produce an output that can be used as an input to a host java rule.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of input files
 arch interface
 cmd string, The command to run on one or more input files. Cmd supports substitution of a few variables (the actual substitution is implemented in GenerateAndroidBuildActions below) Available variables for substitution:

 $(location): the path to the first entry in tools or tool_files
 $(location <label>): the path to the tool, tool_file, input or output with name <label>
 $(in): one or more input files
 $(out): a single output file
 $(depfile): a file to which dependencies will be written, if the depfile property is set to true
 $(genDir): the sandbox directory for this tool; contains $(out)
 $$: a literal $

All files used must be declared as inputs (to ensure proper up-to-date checks). Use "$(in)" directly in Cmd to ensure that all inputs used are declared.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 depfile bool, Enable reading a file containing dependencies in gcc format after the command completes
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, input files to exclude
 export_include_dirs list of strings, List of directories to export generated headers from
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files that will be generated
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 tool_files list of strings, Local file that is used as the tool
 tools list of strings, name of the modules (if any) that produces the host executable. Leave empty for prebuilts or scripts that do not need a module to build them.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_host_for_device

java_host_for_device makes the classes.jar output of a host java_library module available to device java_library modules. It is rarely necessary, and its usage is restricted to a few allowed projects.
 name string, The name of the module. Must be unique across all modules.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 libs list of strings, List of modules whose contents will be visible to modules that depend on this module.
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_import

java_import imports one or more `.jar` files into the build graph as if they were built by a java_library module. By default, a java_import has a single variant that expects a `.jar` file containing `.class` files that were compiled against an Android classpath. Specifying `host_supported: true` will produce two variants, one for use as a dependency of device modules and one for host modules.
 name string, The name of the module. Must be unique across all modules.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_dirs list of strings, List of directories to remove from the jar file(s)
 exclude_files list of strings, List of files to remove from the jar file(s)
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool
 jars list of strings
 jetifier bool, if set to true, run Jetifier against .jar file. Defaults to false.
 libs list of strings, List of shared java libs that this module has dependencies to
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_member_name string, Name of the module that this sdk member is representing
 sdk_version string
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_import_host

java_import imports one or more `.jar` files into the build graph as if they were built by a java_library_host module. A java_import_host has a single variant that expects a `.jar` file containing `.class` files that were compiled against a host bootclasspath.
 name string, The name of the module. Must be unique across all modules.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_dirs list of strings, List of directories to remove from the jar file(s)
 exclude_files list of strings, List of files to remove from the jar file(s)
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool
 jars list of strings
 jetifier bool, if set to true, run Jetifier against .jar file. Defaults to false.
 libs list of strings, List of shared java libs that this module has dependencies to
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_version string
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_library

java_library builds and links sources into a `.jar` file for the device, and possibly for the host as well. By default, a java_library has a single variant that produces a `.jar` file containing `.class` files that were compiled against the device bootclasspath. This jar is not suitable for installing on a device, but can be used as a `static_libs` dependency of another module. Specifying `installable: true` will product a `.jar` file containing `classes.dex` files, suitable for installing on a device. Specifying `host_supported: true` will produce two variants, one compiled against the device bootclasspath and one compiled against the host bootclasspath.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 tag string, The tag of the output of this module that should be output.
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable.
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_member_name string, Name of the module that this sdk member is representing
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_library_host

java_library_host builds and links sources into a `.jar` file for the host. A java_library_host has a single variant that produces a `.jar` file containing `.class` files that were compiled against the host bootclasspath.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 manifest string, manifest file to be included in resulting jar
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_library_static

java_library_static is an obsolete alias for java_library.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 tag string, The tag of the output of this module that should be output.
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable.
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_member_name string, Name of the module that this sdk member is representing
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_plugin

A java_plugin module describes a host java library that will be used by javac as an annotation processor.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 generates_api bool, If true, assume the annotation processor will generate classes that are referenced from outside the module. This necessitates disabling the turbine optimization on modules that use this plugin, which will reduce parallelism and cause more recompilation for modules that depend on modules that use this plugin.
 host_required list of strings, names of other modules to install on host if this module is installed
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable.
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 manifest string, manifest file to be included in resulting jar
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 plugins list of strings, List of modules to use as annotation processors
 processor_class string, The optional name of the class that javac will use to run the annotation processor.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_sdk_library

java_sdk_library is a special Java library that provides optional platform APIs to apps. In practice, it can be viewed as a combination of several modules: 1) stubs library that clients are linked against to, 2) droiddoc module that internally generates API stubs source files, 3) the real runtime shared library that implements the APIs, and 4) XML file for adding the runtime lib to the classpath at runtime if requested via <uses-library>.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 annotations_enabled bool, is set to true, Metalava will allow framework SDK to contain annotations.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 api_dir string, the relative path to the directory containing the api specification files. Defaults to "api".
api_lint
Properties related to api linting.
 enabled bool, Enable api linting.
 api_only bool, Determines whether a runtime implementation library is built; defaults to false. If true then it also prevents the module from being used as a shared module, i.e. it is as is shared_library: false, was set.
 api_packages list of strings, list of package names that will be documented and publicized as API. This allows the API to be restricted to a subset of the source files provided. If this is unspecified then all the source files will be treated as being part of the API.
 arch interface
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 core_lib bool, If set to true, the path of dist files is apistubs/core. Defaults to false.
 default_to_stubs bool, Determines if the stubs are preferred over the implementation library for linking, even when the client doesn't specify sdk_version. When this is set to true, such clients are provided with the widest API surface that this lib provides. Note however that this option doesn't affect the clients that are in the same APEX as this library. In that case, the clients are always linked with the implementation library. Default is false.
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 droiddoc_option_files list of strings, local files that are used within user customized droiddoc options.
 droiddoc_options list of strings, additional droiddoc options Available variables for substitution:

 $(location <label>): the path to the droiddoc_option_files with name <label>

 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 hidden_api_packages list of strings, list of package names that must be hidden from the API
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 impl_library_visibility list of strings, Visibility for impl library module. If not specified then defaults to the visibility property.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 manifest string, manifest file to be included in resulting jar
 merge_annotations_dirs list of strings, a list of top-level directories containing files to merge qualifier annotations (i.e. those intended to be included in the stubs written) from.
 merge_inclusion_annotations_dirs list of strings, a list of top-level directories containing Java stub files to merge show/hide annotations from.
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 module_lib ApiScopeProperties, The properties specific to the module-lib api scope Unless explicitly specified by using test.enabled the module-lib api scope is disabled by default.
 multilib interface
 naming_scheme string, The naming scheme to use for the components that this module creates. If not specified then it defaults to "default". The other allowable value is "framework-modules" which matches the scheme currently used by framework modules for the equivalent components represented as separate Soong modules. This is a temporary mechanism to simplify conversion from separate modules for each component that follow a different naming pattern to the default one. TODO(b/155480189) - Remove once naming inconsistencies have been resolved.
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 public ApiScopeProperties, The properties specific to the public api scope Unless explicitly specified by using public.enabled the public api scope is enabled by default in both legacy and non-legacy mode.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 shared_library bool, Specifies whether this module can be used as an Android shared library; defaults to true. An Android shared library is one that can be referenced in a <uses-library> element in an AndroidManifest.xml.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 stub_only_libs list of strings, List of Java libraries that will be in the classpath when building stubs
 stubs_library_visibility list of strings, Visibility for stubs library modules. If not specified then defaults to the visibility property.
 stubs_source_visibility list of strings, Visibility for stubs source modules. If not specified then defaults to the visibility property.
 system ApiScopeProperties, The properties specific to the system api scope In legacy mode the system api scope is enabled by default when sdk_version is set to something other than "none". In non-legacy mode the system api scope is disabled by default.
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 system_server ApiScopeProperties, The properties specific to the system-server api scope Unless explicitly specified by using test.enabled the module-lib api scope is disabled by default.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 test ApiScopeProperties, The properties specific to the test api scope In legacy mode the test api scope is enabled by default when sdk_version is set to something other than "none". In non-legacy mode the test api scope is disabled by default.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_sdk_library_import

java_sdk_library_import imports a prebuilt java_sdk_library.
 name string, The name of the module. Must be unique across all modules.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 libs list of strings, List of shared java libs, common to all scopes, that this module has dependencies to
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 naming_scheme string, The naming scheme to use for the components that this module creates. If not specified then it defaults to "default". The other allowable value is "framework-modules" which matches the scheme currently used by framework modules for the equivalent components represented as separate Soong modules. This is a temporary mechanism to simplify conversion from separate modules for each component that follow a different naming pattern to the default one. TODO(b/155480189) - Remove once naming inconsistencies have been resolved.
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_member_name string, Name of the module that this sdk member is representing
 shared_library bool, Specifies whether this module can be used as an Android shared library; defaults to true. An Android shared library is one that can be referenced in a <uses-library> element in an AndroidManifest.xml.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_system_modules

java_system_modules creates a system module from a set of java libraries that can be referenced from the system_modules property. It must contain at a minimum the java.base module which must include classes from java.lang amongst other java packages.
 name string, The name of the module. Must be unique across all modules.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 libs list of strings, List of java library modules that should be included in the system modules
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_system_modules_import

A prebuilt version of java_system_modules. It does not import the generated system module, it generates the system module from imported java libraries in the same way that java_system_modules does. It just acts as a prebuilt, i.e. can have the same base name as another module type and the one to use is selected at runtime.
 name string, The name of the module. Must be unique across all modules.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 libs list of strings, List of java library modules that should be included in the system modules
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_member_name string, Name of the module that this sdk member is representing
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_test

java_test builds a and links sources into a `.jar` file for the device, and possibly for the host as well, and creates an `AndroidTest.xml` file to allow running the test with `atest` or a `TEST_MAPPING` file. By default, a java_test has a single variant that produces a `.jar` file containing `classes.dex` files that were compiled against the device bootclasspath. Specifying `host_supported: true` will produce two variants, one compiled against the device bootclasspath and one compiled against the host bootclasspath.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 arch interface
 auto_gen_config bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml doesn't exist next to the Android.bp, this attribute doesn't need to be set to true explicitly.
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 data list of strings, list of files or filegroup modules that provide data that should be installed alongside the test
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 output_params list of strings, List of extra options that will be passed to the proto generator.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 test_config string, the name of the test configuration (for example "AndroidTest.xml") that should be installed with the module.
 test_config_template string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that should be installed with the module.
 test_mainline_modules list of strings, Add parameterized mainline modules to auto generated test config. The options will be handled by TradeFed to do downloading and installing the specified modules on the device.
 test_suites list of strings, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_test_helper_library

java_test_helper_library creates a java library and makes sure that it is added to the appropriate test suite.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 export_include_dirs list of strings, directories that should be added as include directories for any aidl sources of modules that depend on this module, as well as to aidl for this module.
 generate_traces bool, whether to generate traces (for systrace) for this interface
 generate_get_transaction_name bool, whether to generate Binder#GetTransaction name method.
 arch interface
 compile_dex bool, If set to true, compile dex regardless of installable. Defaults to false.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dex_preopt
 enabled bool, If false, prevent dexpreopting. Defaults to true.
 app_image bool, If true, generate an app image (.art file) for this module.
 profile_guided bool, If true, use a checked-in profile to guide optimization. Defaults to false unless a matching profile is set or a profile is found in PRODUCT_DEX_PREOPT_PROFILE_DIR that matches the name of this module, in which case it is defaulted to true.
 profile string, If set, provides the path to profile relative to the Android.bp file. If not set, defaults to searching for a file that matches the name of this module in the default profile location set by PRODUCT_DEX_PREOPT_PROFILE_DIR, or empty if not found.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dxflags list of strings, list of module-specific flags that will be used for dex compiles
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 hostdex bool, If true, export a copy of the module as a -hostdex module for host testing.
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
lint
Controls for running Android Lint on the module.
 enabled bool, If true, run Android Lint on the module. Defaults to true.
 flags list of strings, Flags to pass to the Android Lint tool.
 fatal_checks list of strings, Checks that should be treated as fatal.
 error_checks list of strings, Checks that should be treated as errors.
 warning_checks list of strings, Checks that should be treated as warnings.
 disabled_checks list of strings, Checks that should be skipped.
 extra_check_modules list of strings, Modules that provide extra lint checks
 manifest string, manifest file to be included in resulting jar
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
optimize
 enabled bool, If false, disable all optimization. Defaults to true for android_app and android_test modules, false for java_library and java_test modules.
 enabledByDefault bool, True if the module containing this has it set by default.
 shrink bool, If true, optimize for size by removing unused code. Defaults to true for apps, false for libraries and tests.
 optimize bool, If true, optimize bytecode. Defaults to false.
 obfuscate bool, If true, obfuscate bytecode. Defaults to false.
 no_aapt_flags bool, If true, do not use the flag files generated by aapt that automatically keep classes referenced by the app manifest. Defaults to false.
 proguard_flags list of strings, Flags to pass to proguard.
 proguard_flags_files list of strings, Specifies the locations of files containing proguard flags.
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 platform_apis bool, Whether to compile against the platform APIs instead of an SDK. If true, then sdk_version must be empty. The value of this field is ignored when module's type isn't android_app.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath.
 target interface
target.host, target.android
 compile_multilib string
target.hostdex
 required list of strings, Additional required dependencies to add to -hostdex modules.
 target_required list of strings, names of other modules to install on target if this module is installed
 target_sdk_version string, if not blank, set the targetSdkVersion in the AndroidManifest.xml. Defaults to sdk_version if not set.
 test_suites list of strings, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
 uncompress_dex bool, Keep the data uncompressed. We always need uncompressed dex for execution, so this might actually save space by avoiding storing the same data twice. This defaults to reasonable value based on module and should not be set. It exists only to support ART tests.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 v4_signature bool, If true, generate the signature file of APK Signing Scheme V4, along side the signed APK file. Defaults to false.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_test_host

java_test_host builds a and links sources into a `.jar` file for the host, and creates an `AndroidTest.xml` file to allow running the test with `atest` or a `TEST_MAPPING` file. A java_test_host has a single variant that produces a `.jar` file containing `.class` files that were compiled against the host bootclasspath.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 arch interface
 auto_gen_config bool, Flag to indicate whether or not to create test config automatically. If AndroidTest.xml doesn't exist next to the Android.bp, this attribute doesn't need to be set to true explicitly.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 data list of strings, list of files or filegroup modules that provide data that should be installed alongside the test
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 manifest string, manifest file to be included in resulting jar
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 output_params list of strings, List of extra options that will be passed to the proto generator.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 test_config string, the name of the test configuration (for example "AndroidTest.xml") that should be installed with the module.
 test_config_template string, the name of the test configuration template (for example "AndroidTestTemplate.xml") that should be installed with the module.
 test_mainline_modules list of strings, Add parameterized mainline modules to auto generated test config. The options will be handled by TradeFed to do downloading and installing the specified modules on the device.
 test_suites list of strings, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

java_test_import

java_test_import imports one or more `.jar` files into the build graph as if they were built by a java_test module and makes sure that it is added to the appropriate test suite. By default, a java_test_import has a single variant that expects a `.jar` file containing `.class` files that were compiled against an Android classpath. Specifying `host_supported: true` will produce two variants, one for use as a dependency of device modules and one for host modules.
 name string, The name of the module. Must be unique across all modules.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_dirs list of strings, List of directories to remove from the jar file(s)
 exclude_files list of strings, List of files to remove from the jar file(s)
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool Default: true
 jars list of strings
 jetifier bool, if set to true, run Jetifier against .jar file. Defaults to false.
 libs list of strings, List of shared java libs that this module has dependencies to
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_member_name string, Name of the module that this sdk member is representing
 sdk_version string
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 stem string, set the name of the output
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 test_config string, the name of the test configuration (for example "AndroidTest.xml") that should be installed with the module.
 test_suites list of strings, list of compatibility suites (for example "cts", "vts") that the module should be installed into.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

javadoc

javadoc converts .java source files to documentation using javadoc.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 arch interface
 arg_files list of strings, local files that are used within user customized droiddoc options.
 args string, user customized droiddoc args. Available variables for substitution:

 $(location <label>): the path to the arg_files with name <label>
 $$: a literal $

 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files filegroup or genrule can be included within this property.
 filter_packages list of strings, list of package names that should actually be used. If this property is left unspecified, all the sources from the srcs property is used.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
 java_version string, If not blank, set the java version passed to javadoc as -source
 libs list of strings, list of java libraries that will be in the classpath.
 licenses list of strings, Names of the licenses that apply to this module.
 local_sourcepaths list of strings, list of directories rooted at the Android.bp file that will be added to the search paths for finding source files when passing package names.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files used in args that will be generated
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sandbox bool, If set, metalava is sandboxed to only read files explicitly specified on the command line. Defaults to false.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath. Defaults to "none"
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

javadoc_host

javadoc_host converts .java source files to documentation using javadoc.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 arch interface
 arg_files list of strings, local files that are used within user customized droiddoc options.
 args string, user customized droiddoc args. Available variables for substitution:

 $(location <label>): the path to the arg_files with name <label>
 $$: a literal $

 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files filegroup or genrule can be included within this property.
 filter_packages list of strings, list of package names that should actually be used. If this property is left unspecified, all the sources from the srcs property is used.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
 java_version string, If not blank, set the java version passed to javadoc as -source
 libs list of strings, list of java libraries that will be in the classpath.
 licenses list of strings, Names of the licenses that apply to this module.
 local_sourcepaths list of strings, list of directories rooted at the Android.bp file that will be added to the search paths for finding source files when passing package names.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files used in args that will be generated
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sandbox bool, If set, metalava is sandboxed to only read files explicitly specified on the command line. Defaults to false.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath. Defaults to "none"
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

override_android_app

override_android_app is used to create an android_app module based on another android_app by overriding some of its properties.
 name string, The name of the module. Must be unique across all modules.
 arch interface
 base string, Name of the base module to be overridden
 certificate string, The name of a certificate in the default certificate directory, blank to use the default product certificate, or an android_app_certificate module name in the form ":module".
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
 logging_parent string, the logging parent of this app.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 package_name string, the package name of this app. The package name in the manifest file is used if one was not given.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

override_android_test

override_android_test is used to create an android_app module based on another android_test by overriding some of its properties.
 name string, The name of the module. Must be unique across all modules.
 arch interface
 base string, Name of the base module to be overridden
 certificate string, The name of a certificate in the default certificate directory, blank to use the default product certificate, or an android_app_certificate module name in the form ":module".
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 instrumentation_for string
 instrumentation_target_package string, if specified, the instrumentation target package name in the manifest is overwritten by it.
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
 logging_parent string, the logging parent of this app.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 package_name string, the package name of this app. The package name in the manifest file is used if one was not given.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

override_runtime_resource_overlay

override_runtime_resource_overlay is used to create a module based on another runtime_resource_overlay module by overriding some of its properties.
 name string, The name of the module. Must be unique across all modules.
 arch interface
 base string, Name of the base module to be overridden
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 package_name string, the package name of this app. The package name in the manifest file is used if one was not given.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_package_name string, the target package name of this overlay app. The target package name in the manifest file is used if one was not given.
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

platform_compat_config

 name string, The name of the module. Must be unique across all modules.
 src string
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

prebuilt_apis

prebuilt_apis is a meta-module that generates filegroup modules for all API txt files found under the directory where the Android.bp is located. Specifically, an API file located at ./<ver>/<scope>/api/<module>.txt generates a filegroup module named <module>-api.<scope>.<ver>. It also creates <module>-api.<scope>.latest for the latest <ver>. Similarly, it generates a java_import for all API .jar files found under the directory where the Android.bp is located. Specifically, an API file located at ./<ver>/<scope>/api/<module>.jar generates a java_import module named <prebuilt-api-module>_<scope>_<ver>_<module>, and for SDK versions >= 30 a java_system_modules module named <prebuilt-api-module>_public_<ver>_system_modules
 name string, The name of the module. Must be unique across all modules.
 api_dirs list of strings, list of api version directories
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

prebuilt_stubs_sources

prebuilt_stubs_sources imports a set of java source files as if they were generated by droidstubs. By default, a prebuilt_stubs_sources has a single variant that expects a set of `.java` files generated by droidstubs. Specifying `host_supported: true` will produce two variants, one for use as a dependency of device modules and one for host modules. Intended only for use by sdk snapshots.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 owner string, vendor who owns this module
 prefer bool, When prefer is set to true the prebuilt will be used instead of any source module with a matching name.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 sdk_member_name string, Name of the module that this sdk member is representing
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

runtime_resource_overlay

runtime_resource_overlay generates a resource-only apk file that can overlay application and system resources at run time.
 name string, The name of the module. Must be unique across all modules.
 aapt_include_all_resources bool, include all resource configurations, not just the product-configured ones.
 aaptflags list of strings, flags passed to aapt when creating the apk
 additional_manifests list of strings, paths to additional manifest files to merge with main manifest.
 arch interface
 asset_dirs list of strings, list of directories relative to the Blueprints file containing assets. Defaults to ["assets"] if a directory called assets exists. Set to [] to disable the default.
 certificate string, the name of a certificate in the default certificate directory or an android_app_certificate module name in the form ":module".
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 dont_merge_manifests bool, do not include AndroidManifest from dependent libraries
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 licenses list of strings, Names of the licenses that apply to this module.
 lineage string, Name of the signing certificate lineage file.
 manifest string, path to AndroidManifest.xml. If unset, defaults to "AndroidManifest.xml".
 min_sdk_version string, if not blank, set the minimum version of the sdk that the compiled artifacts will run against. Defaults to sdk_version if not set.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 overrides list of strings, Names of modules to be overridden. Listed modules can only be other overlays (in Make or Soong). This does not completely prevent installation of the overridden overlays, but if both overlays would be installed by default (in PRODUCT_PACKAGES) the other overlay will be removed from PRODUCT_PACKAGES.
 owner string, vendor who owns this module
 package_name string, the package name of this app. The package name in the manifest file is used if one was not given.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 resource_dirs list of strings, list of directories relative to the Blueprints file containing Android resources. Defaults to ["res"] if a directory called res exists. Set to [] to disable the default.
 resource_libs list of strings, list of android_app modules whose resources are extracted and linked against
 resource_zips list of strings, list of zip files containing Android resources.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_libs list of strings, list of android_library modules whose resources are extracted and linked against statically
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_package_name string, the target package name of this overlay app. The target package name in the manifest file is used if one was not given.
 target_required list of strings, names of other modules to install on target if this module is installed
 theme string, optional theme name. If specified, the overlay package will be applied only when the ro.boot.vendor.overlay.theme system property is set to the same value.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.

stubs_defaults

 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 host_supported bool, If set to true, build a variant of the module for the host. Defaults to false.
 device_supported bool, If set to true, build a variant of the module for the device. Defaults to true.
aidl
 include_dirs list of strings, Top level directories to pass to aidl tool
 local_include_dirs list of strings, Directories rooted at the Android.bp file to pass to aidl tool
 annotations_enabled bool, is set to true, Metalava will allow framework SDK to contain annotations.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 api_filename string, the generated public API filename by Metalava.
 api_levels_annotations_dirs list of strings, the dirs which Metalava extracts API levels annotations from.
 api_levels_annotations_enabled bool, is set to true, Metalava will allow framework SDK to contain API levels annotations.
 api_levels_jar_filename string, the filename which Metalava extracts API levels annotations from. Defaults to android.jar.
 arch interface
 arg_files list of strings, local files that are used within user customized droiddoc options.
 args string, user customized droiddoc args. Available variables for substitution:

 $(location <label>): the path to the arg_files with name <label>
 $$: a literal $

check_api
 last_released ApiToCheck
 current ApiToCheck
 ignore_missing_latest_api bool, The java_sdk_library module generates references to modules (i.e. filegroups) from which information about the latest API version can be obtained. As those modules may not exist (e.g. because a previous version has not been released) it sets ignore_missing_latest_api=true on the droidstubs modules it creates so that droidstubs can ignore those references if the modules do not yet exist. If true then this will ignore module references for modules that do not exist in properties that supply the previous version of the API. There are two sets of those: * Api_file, Removed_api_file in check_api.last_released * New_since in check_api.api_lint.new_since The first two must be set as a pair, so either they should both exist or neither should exist - in which case when this property is true they are ignored. If one exists and the other does not then it is an error.
api_lint
 enabled bool
 new_since string, If set, performs api_lint on any new APIs not found in the given signature file
 baseline_file string, If not blank, path to the baseline txt file for approved API lint violations.
 check_nullability_warnings string, a file containing expected warnings produced by validation of nullability annotations.
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 create_doc_stubs bool, if set to true, allow Metalava to generate doc_stubs source files. Defaults to false.
 defaults list of strings
 defaults_visibility list of strings, Controls the visibility of the defaults module itself.
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files filegroup or genrule can be included within this property.
 filter_packages list of strings, list of package names that should actually be used. If this property is left unspecified, all the sources from the srcs property is used.
 generate_stubs bool, if set to false then do not write out stubs. Defaults to true. TODO(b/146727827): Remove capability when we do not need to generate stubs and API separately.
 host_required list of strings, names of other modules to install on host if this module is installed
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
 java_version string, If not blank, set the java version passed to javadoc as -source
 jdiff_enabled bool, If set to true, .xml based public API file will be also generated, and JDiff tool will be invoked to genreate javadoc files. Defaults to false.
 libs list of strings, list of java libraries that will be in the classpath.
 licenses list of strings, Names of the licenses that apply to this module.
 local_sourcepaths list of strings, list of directories rooted at the Android.bp file that will be added to the search paths for finding source files when passing package names.
 merge_annotations_dirs list of strings, a list of top-level directories containing files to merge qualifier annotations (i.e. those intended to be included in the stubs written) from.
 merge_inclusion_annotations_dirs list of strings, a list of top-level directories containing Java stub files to merge show/hide annotations from.
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
 out list of strings, names of the output files used in args that will be generated
 owner string, vendor who owns this module
 previous_api string, user can specify the version of previous released API file in order to do compatibility check.
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 removed_api_filename string, the generated removed API filename by Metalava.
 removed_dex_api_filename string, the generated removed Dex API filename by Metalava.
 required list of strings, names of other modules to install if this module is installed
 sandbox bool, If set, metalava is sandboxed to only read files explicitly specified on the command line. Defaults to false.
 sdk_version string, if not blank, set to the version of the sdk to compile against. Defaults to compiling against the current platform.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 system_modules string, When targeting 1.9 and above, override the modules to use with --system, otherwise provides defaults libraries to add to the bootclasspath. Defaults to "none"
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 validate_nullability_from_list string, a file containing a list of classes to do nullability validation for.
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.
 write_sdk_values bool, if set to true, collect the values used by the Dev tools and write them in files packaged with the SDK. Defaults to false.

tradefed_java_library_host

tradefed_java_library_factory wraps java_library and installs an additional copy of the output jar to $HOST_OUT/tradefed.
 name string, The name of the module. Must be unique across all modules.
 srcs list of strings, list of source files used to compile the Java module. May be .java, .logtags, .proto, or .aidl files.
 apex_available list of strings, Availability of this module in APEXes. Only the listed APEXes can contain this module. If the module has stubs then other APEXes and the platform may access it through them (subject to visibility). "//apex_available:anyapex" is a pseudo APEX name that matches to any APEX. "//apex_available:platform" refers to non-APEX partitions like "system.img". Default is ["//apex_available:platform"].
 arch interface
 compile_multilib string, control whether this module compiles for 32-bit, 64-bit, or both. Possible values are "32" (compile for 32-bit only), "64" (compile for 64-bit only), "both" (compile for both architectures), or "first" (compile for 64-bit on a 64-bit platform, and 32-bit on a 32-bit platform
 defaults list of strings
 device_specific bool, whether this module is specific to a device, not only for SoC, but also for off-chip peripherals. When set to true, it is installed into /odm (or /vendor/odm if odm partition does not exist, or /system/vendor/odm if both odm and vendor partitions do not exist). This implies `soc_specific:true`.
dist
 targets list of strings, copy the output of this module to the $DIST_DIR when `dist` is specified on the command line and any of these targets are also on the command line, or otherwise built
 dest string, The name of the output artifact. This defaults to the basename of the output of the module.
 dir string, The directory within the dist directory to store the artifact. Defaults to the top level directory ("").
 suffix string, A suffix to add to the artifact file name (before any extension).
 enabled bool, emit build rules for this module Disabling a module should only be done for those modules that cannot be built in the current environment. Modules that can build in the current environment but are not usually required (e.g. superceded by a prebuilt) should not be disabled as that will prevent them from being built by the checkbuild target and so prevent early detection of changes that have broken those modules.
errorprone
 javacflags list of strings, List of javac flags that should only be used when running errorprone.
 exclude_java_resource_dirs list of strings, list of directories that should be excluded from java_resource_dirs
 exclude_java_resources list of strings, list of files that should be excluded from java_resources and java_resource_dirs
 exclude_srcs list of strings, list of source files that should not be used to build the Java module. This is most useful in the arch/multilib variants to remove non-common files
 exported_plugins list of strings, List of modules to export to libraries that directly depend on this library as annotation processors
 host_required list of strings, names of other modules to install on host if this module is installed
 include_srcs bool, If set to true, include sources used to compile the module in to the final jar
 init_rc list of strings, init.rc files to be installed if this module is installed
 installable bool, If set to true, allow this module to be dexed and installed on devices. Has no effect on host modules, which are always considered installable. Default: true
jacoco
 include_filter list of strings, List of classes to include for instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. If unset defaults to all classes. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 exclude_filter list of strings, List of classes to exclude from instrumentation with jacoco to collect coverage information at runtime when building with coverage enabled. Overrides classes selected by the include_filter property. Supports '*' as the last character of an entry in the list as a wildcard match. If preceded by '.' it matches all classes in the package and subpackages, otherwise it matches classes in the package that have the class name as a prefix.
 jarjar_rules string, if not blank, run jarjar using the specified rules file
 java_resource_dirs list of strings, list of directories containing Java resources
 java_resources list of strings, list of files to use as Java resources
 java_version string, If not blank, set the java version passed to javac as -source and -target
 javac_shard_size int64, The number of Java source entries each Javac instance can process
 javacflags list of strings, list of module-specific flags that will be used for javac compiles
 kotlincflags list of strings, list of module-specific flags that will be used for kotlinc compiles
 libs list of strings, list of of java libraries that will be in the classpath
 licenses list of strings, Names of the licenses that apply to this module.
 manifest string, manifest file to be included in resulting jar
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architecures (also known as native bridge binary)
 notice string, relative path to a file to include in the list of notices for the device
openjdk9
 srcs list of strings, List of source files that should only be used when passing -source 1.9 or higher
 javacflags list of strings, List of javac flags that should only be used when passing -source 1.9 or higher
 owner string, vendor who owns this module
 patch_module string, When compiling language level 9+ .java code in packages that are part of a system module, patch_module names the module that your sources and dependencies should be patched into. The Android runtime currently doesn't implement the JEP 261 module system so this option is only supported at compile time. It should only be needed to compile tests in packages that exist in libcore and which are inconvenient to move elsewhere.
 permitted_packages list of strings, If not empty, classes are restricted to the specified packages and their sub-packages. This restriction is checked after applying jarjar rules and including static libs.
 plugins list of strings, List of modules to use as annotation processors
 product_specific bool, whether this module is specific to a software configuration of a product (e.g. country, network operator, etc). When set to true, it is installed into /product (or /system/product if product partition does not exist).
 proprietary bool, whether this is a proprietary vendor module, and should be installed into /vendor
proto
 output_params list of strings, List of extra options that will be passed to the proto generator.
 type string, Proto generator type. C++: full or lite. Java: micro, nano, stream, or lite.
 plugin string, Proto plugin to use as the generator. Must be a cc_binary_host module.
 include_dirs list of strings, list of directories that will be added to the protoc include paths.
 local_include_dirs list of strings, list of directories relative to the bp file that will be added to the protoc include paths.
 canonical_path_from_root bool, whether to identify the proto files from the root of the source tree (the original method in Android, useful for android-specific protos), or relative from where they were specified (useful for external/third party protos). This defaults to true today, but is expected to default to false in the future.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 required list of strings, names of other modules to install if this module is installed
 services list of strings, List of files to include in the META-INF/services folder of the resulting jar.
 soc_specific bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist).
 static_kotlin_stdlib bool, If true, package the kotlin stdlib into the jar. Defaults to true.
 static_libs list of strings, list of java libraries that will be compiled into the resulting jar
 system_ext_specific bool, whether this module extends system. When set to true, it is installed into /system_ext (or /system/system_ext if system_ext partition does not exist).
 target interface
target.host, target.android
 compile_multilib string
 target_required list of strings, names of other modules to install on target if this module is installed
 use_tools_jar bool, Add host jdk tools.jar to bootclasspath
 vendor bool, whether this module is specific to an SoC (System-On-a-Chip). When set to true, it is installed into /vendor (or /system/vendor if vendor partition does not exist). Use `soc_specific` instead for better meaning.
 vintf_fragments list of strings, VINTF manifest fragments to be installed if this module is installed
 visibility list of strings, Controls the visibility of this module to other modules. Allowable values are one or more of these formats:

 ["//visibility:public"]: Anyone can use this module.
 ["//visibility:private"]: Only rules in the module's package (not its subpackages) can use
     this module.
 ["//visibility:override"]: Discards any rules inherited from defaults or a creating module.
     Can only be used at the beginning of a list of visibility rules.
 ["//some/package:__pkg__", "//other/package:__pkg__"]: Only modules in some/package and
     other/package (defined in some/package/*.bp and other/package/*.bp) have access to
     this module. Note that sub-packages do not have access to the rule; for example,
     //some/package/foo:bar or //other/package/testing:bla wouldn't have access. __pkg__
     is a special module and must be used verbatim. It represents all of the modules in the
     package.
 ["//project:__subpackages__", "//other:__subpackages__"]: Only modules in packages project
     or other or in one of their sub-packages have access to this module. For example,
     //project:rule, //project/library:lib or //other/testing/internal:munge are allowed
     to depend on this rule (but not //independent:evil)
 ["//project"]: This is shorthand for ["//project:__pkg__"]
 [":__subpackages__"]: This is shorthand for ["//project:__subpackages__"] where
     //project is the module's package. e.g. using [":__subpackages__"] in
     packages/apps/Settings/Android.bp is equivalent to
     //packages/apps/Settings:__subpackages__.
 ["//visibility:legacy_public"]: The default visibility, behaves as //visibility:public
     for now. It is an error if it is used in a module.

If a module does not specify the `visibility` property then it uses the `default_visibility` property of the `package` module in the module's package. If the `default_visibility` property is not set for the module's package then it will use the `default_visibility` of its closest ancestor package for which a `default_visibility` property is specified. If no `default_visibility` property can be found then the module uses the global default of `//visibility:legacy_public`. The `visibility` property has no effect on a defaults module although it does apply to any non-defaults module that uses it. To set the visibility of a defaults module, use the `defaults_visibility` property on the defaults module; not to be confused with the `default_visibility` property on the package module. See https://android.googlesource.com/platform/build/soong/+/master/README.md#visibility for more details.