rust_binary

rust_binary produces a binary that is runnable on a device.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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_executable bool, Builds this binary as a static binary. Implies prefer_rlib true. Static executables currently only support for bionic targets. Non-bionic targets will not produce a fully static binary, but will still implicitly imply prefer_rlib true.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_binary_host

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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_executable bool, Builds this binary as a static binary. Implies prefer_rlib true. Static executables currently only support for bionic targets. Non-bionic targets will not produce a fully static binary, but will still implicitly imply prefer_rlib true.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_bindgen

rust_bindgen generates Rust FFI bindings to C libraries using bindgen given a wrapper header as the primary input. Bindgen has a number of flags to control the generated source, and additional flags can be passed to clang to ensure the header and generated source is appropriately handled. It is recommended to add it as a dependency in the rlibs, dylibs or rustlibs property. It may also be added in the srcs property for external crates, using the ":" prefix.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 bindgen_flags list of string, list of bindgen-specific flags and options
 c_std string, C standard version to use. Can be a specific version (such as "gnu11"), "experimental" (which will use draft versions like C1x when available), or the empty string (which will use the default). If this is set, the file extension will be ignored and this will be used as the std version value. Setting this to "default" will use the build system default version. This cannot be set at the same time as cpp_std.
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 cflags list of string, list of clang flags required to correctly interpret the headers.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property. Default: none
 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).
 cpp_std string, C++ standard version to use. Can be a specific version (such as "gnu++11"), "experimental" (which will use draft versions like C++1z when available), or the empty string (which will use the default). If this is set, the file extension will be ignored and this will be used as the std version value. Setting this to "default" will use the build system default version. This cannot be set at the same time as c_std.
 cppflags list of string, list of c++ specific clang flags required to correctly interpret the headers. This is provided primarily to make sure cppflags defined in cc_defaults are pulled in.
 crate_name string, crate name, used for the library variant of this source provider. See additional details in rust_library.
 custom_bindgen string, module name of a custom binary/script which should be used instead of the 'bindgen' binary. This custom binary must expect arguments in a similar fashion to bindgen, e.g. "my_bindgen [flags] wrapper_header.h -o [output_path] -- [clang flags]"
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 header_libs list of string, List of libraries which export include paths required for this module
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default". Default: none
 local_include_dirs list of string, list of directories relative to the Blueprints file that will be added to the include path using -I
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of shared libraries that provide headers for this binding.
 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).
 source_stem string, filename for the generated source file (<source_stem>.rs). This field is required. The inherited "stem" property sets the output filename for the generated library variants only.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.
 wrapper_src string, The wrapper header file. By default this is assumed to be a C header unless the extension is ".hh" or ".hpp". This is used to specify how to interpret the header and determines which '-std' flag to use by default. If your C++ header must have some other extension, then the default behavior can be overridden by setting the cpp_std property.

rust_bindgen_host

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 bindgen_flags list of string, list of bindgen-specific flags and options
 c_std string, C standard version to use. Can be a specific version (such as "gnu11"), "experimental" (which will use draft versions like C1x when available), or the empty string (which will use the default). If this is set, the file extension will be ignored and this will be used as the std version value. Setting this to "default" will use the build system default version. This cannot be set at the same time as cpp_std.
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 cflags list of string, list of clang flags required to correctly interpret the headers.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property. Default: none
 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).
 cpp_std string, C++ standard version to use. Can be a specific version (such as "gnu++11"), "experimental" (which will use draft versions like C++1z when available), or the empty string (which will use the default). If this is set, the file extension will be ignored and this will be used as the std version value. Setting this to "default" will use the build system default version. This cannot be set at the same time as c_std.
 cppflags list of string, list of c++ specific clang flags required to correctly interpret the headers. This is provided primarily to make sure cppflags defined in cc_defaults are pulled in.
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 custom_bindgen string, module name of a custom binary/script which should be used instead of the 'bindgen' binary. This custom binary must expect arguments in a similar fashion to bindgen, e.g. "my_bindgen [flags] wrapper_header.h -o [output_path] -- [clang flags]"
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 header_libs list of string, List of libraries which export include paths required for this module
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default". Default: none
 local_include_dirs list of string, list of directories relative to the Blueprints file that will be added to the include path using -I
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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).
 source_stem string, filename for the generated source file (<source_stem>.rs). This field is required. The inherited "stem" property sets the output filename for the generated library variants only.
 static_libs list of string, list of static libraries that provide headers for this binding.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.
 wrapper_src string, The wrapper header file. By default this is assumed to be a C header unless the extension is ".hh" or ".hpp". This is used to specify how to interpret the header and determines which '-std' flag to use by default. If your C++ header must have some other extension, then the default behavior can be overridden by setting the cpp_std property.

rust_defaults

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the prebuilt file
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 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.
 bindgen_flags list of string, list of bindgen-specific flags and options
 c_std string, C standard version to use. Can be a specific version (such as "gnu11"), "experimental" (which will use draft versions like C1x when available), or the empty string (which will use the default). If this is set, the file extension will be ignored and this will be used as the std version value. Setting this to "default" will use the build system default version. This cannot be set at the same time as cpp_std.
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 cflags list of string, list of clang flags required to correctly interpret the headers.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 cpp_std string, C++ standard version to use. Can be a specific version (such as "gnu++11"), "experimental" (which will use draft versions like C++1z when available), or the empty string (which will use the default). If this is set, the file extension will be ignored and this will be used as the std version value. Setting this to "default" will use the build system default version. This cannot be set at the same time as c_std.
 cppflags list of string, list of c++ specific clang flags required to correctly interpret the headers. This is provided primarily to make sure cppflags defined in cc_defaults are pulled in.
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 custom_bindgen string, module name of a custom binary/script which should be used instead of the 'bindgen' binary. This custom binary must expect arguments in a similar fashion to bindgen, e.g. "my_bindgen [flags] wrapper_header.h -o [output_path] -- [clang flags]"
 data list of string, list of files or filegroup modules that provide data that should be installed alongside the test
 defaults_visibility list of string, 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 header_libs list of string, List of libraries which export include paths required for this module
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 local_include_dirs list of string, list of directories relative to the Blueprints file that will be added to the include path using -I
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_named_install_directory bool, Disables the creation of a test-specific directory when used with relative_install_path. Useful if several tests need to be in the same directory, but test_per_src doesn't work.
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of shared libraries that provide headers for this binding.
 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).
 source_stem string, filename for the generated source file (<source_stem>.rs). This field is required. The inherited "stem" property sets the output filename for the generated library variants only.
 static_executable bool, Builds this binary as a static binary. Implies prefer_rlib true. Static executables currently only support for bionic targets. Non-bionic targets will not produce a fully static binary, but will still implicitly imply prefer_rlib true.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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_harness bool, if set, build with the standard Rust test harness. Defaults to true.
test_options
Test options.
 unit_test bool, If the test is a hostside(no device required) unittest that shall be run during presubmit check.
 test_suites list of string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.
 wrapper_src string, The wrapper header file. By default this is assumed to be a C header unless the extension is ".hh" or ".hpp". This is used to specify how to interpret the header and determines which '-std' flag to use by default. If your C++ header must have some other extension, then the default behavior can be overridden by setting the cpp_std property.

rust_ffi

rust_ffi produces all ffi variants.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_ffi_host

rust_ffi_host produces all FFI variants.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_ffi_host_shared

rust_ffi_shared_host produces an shared library.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_ffi_host_static

rust_ffi_static_host produces a static library.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_ffi_shared

rust_ffi_shared produces a shared library.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_ffi_static

rust_ffi_static produces a static library.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_fuzz

rust_binary produces a binary that is runnable on a device.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 corpus list of string, Optional list of seed files to be installed to the fuzz target's output directory.
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 data list of string, Optional list of data files to be installed to the fuzz target's output directory. Directory structure relative to the module is preserved.
 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`.
 dictionary string, Optional dictionary to be installed to the fuzz target's output directory.
dist
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 fuzz_config FuzzConfig, Config for running the target on fuzzing infrastructure.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool Default: true
 never bool
 shared_libs list of string, list of C shared library dependencies
 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_executable bool, Builds this binary as a static binary. Implies prefer_rlib true. Static executables currently only support for bionic targets. Non-bionic targets will not produce a fully static binary, but will still implicitly imply prefer_rlib true.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_library

rust_library produces all rust variants.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_library_dylib

rust_library_dylib produces a dylib.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_library_host

rust_library_host produces all rust variants.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_library_host_dylib

rust_library_dylib_host produces a dylib.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_library_host_rlib

rust_library_rlib_host produces an rlib.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_library_rlib

rust_library_rlib produces an rlib.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_prebuilt_dylib

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false Default: true
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_prebuilt_library

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false Default: true
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_prebuilt_rlib

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false Default: true
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_proc_macro

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
 shared_libs list of string, list of C shared library dependencies
 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 string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
 suffix string, append to name of 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_protobuf

rust_protobuf generates protobuf rust code from the provided proto file. This uses the protoc-gen-rust plugin for protoc. Additional flags to the protoc command can be passed via the proto_flags property. This module type will create library variants that can be used as a crate dependency by adding it to the rlibs, dylibs, and rustlibs properties of other modules.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property. Default: none
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 grpc_protos list of string, List of relative paths to GRPC-containing proto files that will be used to generate the source. Either this or protos must be defined.
 header_libs list of string, List of libraries which export include paths required for this module
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default". Default: none
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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_flags list of string, List of additional flags to pass to aprotoc
 protos list of string, List of relative paths to proto files that will be used to generate the source. Either this or grpc_protos must be defined.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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).
 source_stem string, filename for the generated source file (<source_stem>.rs). This field is required. The inherited "stem" property sets the output filename for the generated library variants only.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_protobuf_host

A host-only variant of rust_protobuf. Refer to rust_protobuf for more details.
 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 arch interface
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property. Default: none
 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).
 crate_name string, crate name, used for the library variant of this source provider. See additional details in rust_library.
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 grpc_protos list of string, List of relative paths to GRPC-containing proto files that will be used to generate the source. Either this or protos must be defined.
 header_libs list of string, List of libraries which export include paths required for this module
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 include_dirs list of string, path to include directories to pass to cc_* modules, only relevant for static/shared variants.
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default". Default: none
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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_flags list of string, List of additional flags to pass to aprotoc
 protos list of string, List of relative paths to proto files that will be used to generate the source. Either this or grpc_protos must be defined.
 ramdisk bool, Whether this module is installed to ramdisk
 recovery bool, Whether this module is installed to recovery partition
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
rlib, dylib, shared, static
 enabled bool
 srcs list of string
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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).
 source_stem string, filename for the generated source file (<source_stem>.rs). This field is required. The inherited "stem" property sets the output filename for the generated library variants only.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of output
 sysroot bool, Whether this library is part of the Rust toolchain sysroot.
 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 string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_test

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 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.
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 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.
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 data list of string, list of files or filegroup modules that provide data that should be installed alongside the test
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_named_install_directory bool, Disables the creation of a test-specific directory when used with relative_install_path. Useful if several tests need to be in the same directory, but test_per_src doesn't work.
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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_executable bool, Builds this binary as a static binary. Implies prefer_rlib true. Static executables currently only support for bionic targets. Non-bionic targets will not produce a fully static binary, but will still implicitly imply prefer_rlib true.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of 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 string, 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_harness bool, if set, build with the standard Rust test harness. Defaults to true.
test_options
Test options.
 unit_test bool, If the test is a hostside(no device required) unittest that shall be run during presubmit check.
 test_suites list of string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.

rust_test_host

 name string, The name of the module. Must be unique across all modules.
 srcs list of string, path to the source file that is the main entry point of the program (e.g. main.rs or lib.rs)
 defaults list of string
 androidMkDylibs list of string
 androidMkProcMacroLibs list of string
 androidMkRlibs list of string
 androidMkSharedLibs list of string
 androidMkStaticLibs list of string
 apex_available list of string, 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". "com.android.gki.*" matches any APEX module name with the prefix "com.android.gki.". Default is ["//apex_available:platform"].
 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.
 cfgs list of string, list of configuration options to enable for this crate. To enable features, use the "features" property.
 clippy_lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (to disable the execution of clippy). The default value is "default". See also the `lints` property.
 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).
 crate_name string, crate name, required for modules which produce Rust libraries: rust_library, rust_ffi and SourceProvider modules which create library variants (rust_bindgen). This must be the expected extern crate name used in source, and is required to conform to an enforced format matching library output files (if the output file is lib<someName><suffix>, the crate_name property must be <someName>).
 data list of string, list of files or filegroup modules that provide data that should be installed alongside the test
 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
configuration to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 targets list of string, 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, A string tag to select the OutputFiles associated with the tag. If no tag is specified then it will select the default dist paths provided by the module type. If a tag of "" is specified then it will return the default output files provided by the modules, i.e. the result of calling OutputFiles("").
 dists list of Dist, a list of configurations to distribute output files from this module to the distribution directory (default: $OUT/dist, configurable with $DIST_DIR)
 double_loadable bool, whether this module is capable of being loaded with other instance (possibly an older version) of the same module in the same process. Currently, a shared library that is a member of VNDK (vndk: {enabled: true}) can be double loaded in a vendor process if the library is also a (direct and indirect) dependency of an LLNDK library. Such libraries must be explicitly marked as `double_loadable: true` by the owner, or the dependency from the LLNDK lib should be cut if the lib is not designed to be double loaded.
 dylibs list of string, list of rust dylib crate dependencies
 edition string, specific rust edition that should be used if the default version is not desired
 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.
 features list of string, list of features to enable for this crate
 flags list of string, flags to pass to rustc. To enable configuration options or features, use the "cfgs" or "features" properties.
 hideFromMake bool
 host_required list of string, names of other modules to install on host if this module is installed
 init_rc list of string, init.rc files to be installed if this module is installed
 ld_flags list of string, flags to pass to the linker
 licenses list of string, Describes the licenses applicable to this module. Must reference license modules.
 lints string, name of the lint set that should be used to validate this module. Possible values are "default" (for using a sensible set of lints depending on the module's location), "android" (for the strictest lint set that applies to all Android platform code), "vendor" (for a relaxed set) and "none" (for ignoring all lint warnings and errors). The default value is "default".
 min_sdk_version string, Minimum sdk version that the artifact should support when it runs as part of mainline modules(APEX).
 multilib interface
 native_bridge_supported bool, Whether this module is built for non-native architectures (also known as native bridge binary)
 native_coverage bool
 no_named_install_directory bool, Disables the creation of a test-specific directory when used with relative_install_path. Useful if several tests need to be in the same directory, but test_per_src doesn't work.
 no_stdlibs bool, whether to suppress inclusion of standard crates - defaults to false
 notice string, relative path to a file to include in the list of notices for the device
 odm_available bool, This is the same as the "vendor_available" except that the install path of the vendor variant is /odm or /vendor/odm. By replacing "vendor_available: true" with "odm_available: true", the module will install its vendor variant to the /odm partition or /vendor/odm. As the modules with "odm_available: true" still create the vendor variants, they can link to the other vendor modules as the vendor_available modules do. Also, the vendor modules can link to odm_available modules. It may not be used for VNDK modules.
 owner string, vendor who owns this module
 prefer_rlib bool, Change the rustlibs linkage to select rlib linkage by default for device targets. Also link libstd as an rlib as well on device targets. Note: This is the default behavior for host targets. This is primarily meant for rust_binary and rust_ffi modules where the default linkage of libstd might need to be overridden in some use cases. This should generally be avoided with other module types since it may cause collisions at linkage if all dependencies of the root binary module do not link against libstd\ the same way.
 preventInstall bool
 proc_macros list of string, list of rust proc_macro crate dependencies
 product_available bool, whether this module should be allowed to be directly depended by other modules with `product_specific: true` or `product_available: true`. If set to true, an additional product variant will be built separately that is limited to the set of libraries and headers that are exposed to /product modules. The product variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /product modules. Different from the 'vendor_available' property, the modules with vndk: {enabled: true} don't have to define 'product_available'. The VNDK library without 'product_available' may not be depended on by any other modules that has product variants including the product available VNDKs. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk and PRODUCT_PRODUCT_VNDK_VERSION isn't set.
 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
 relative_install_path string, install to a subdirectory of the default install path for the module
 required list of string, names of other modules to install if this module is installed
 rlibs list of string, list of rust rlib crate dependencies
 rustlibs list of string, list of rust automatic crate dependencies
sanitize
enable AddressSanitizer, HWAddressSanitizer, and others.
 address bool
 hwaddress bool
 fuzzer bool
 never bool
 shared_libs list of string, list of C shared library dependencies
 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_executable bool, Builds this binary as a static binary. Implies prefer_rlib true. Static executables currently only support for bionic targets. Non-bionic targets will not produce a fully static binary, but will still implicitly imply prefer_rlib true.
 static_libs list of string, list of C static library dependencies. These dependencies do not normally propagate to dependents and may need to be redeclared. See whole_static_libs for bundling static dependencies into a library.
 stem string, sets name of the output
strip
 none bool, none forces all stripping to be disabled. Device modules default to stripping enabled leaving mini debuginfo. Host modules default to stripping disabled, but can be enabled by setting any other strip boolean property.
 all bool, all forces stripping everything, including the mini debug info.
 keep_symbols bool, keep_symbols enables stripping but keeps all symbols.
 keep_symbols_list list of string, keep_symbols_list specifies a list of symbols to keep if keep_symbols is enabled. If it is unset then all symbols are kept.
 keep_symbols_and_debug_frame bool, keep_symbols_and_debug_frame enables stripping but keeps all symbols and debug frames.
 suffix string, append to name of 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 string, 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_harness bool, if set, build with the standard Rust test harness. Defaults to true.
test_options
Test options.
 unit_test bool, If the test is a hostside(no device required) unittest that shall be run during presubmit check.
 test_suites list of string, 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.
 vendor_available bool, whether this module should be allowed to be directly depended by other modules with `vendor: true`, `proprietary: true`, or `vendor_available:true`. If set to true, two variants will be built separately, one like normal, and the other limited to the set of libraries and headers that are exposed to /vendor modules. The vendor variant may be used with a different (newer) /system, so it shouldn't have any unversioned runtime dependencies, or make assumptions about the system that may not be true in the future. If set to false, this module becomes inaccessible from /vendor modules. The modules with vndk: {enabled: true} must define 'vendor_available' to 'true'. Nothing happens if BOARD_VNDK_VERSION isn't set in the BoardConfig.mk
 vendor_ramdisk bool, Whether this module is installed to vendor ramdisk
 vendor_ramdisk_available bool, Make this module available when building for vendor ramdisk. On device without a dedicated recovery partition, the module is only available after switching root into /first_stage_ramdisk. To expose the module before switching root, install the recovery variant instead (TODO(b/165791368) recovery not yet supported)
 vintf_fragments list of string, VINTF manifest fragments to be installed if this module is installed
 visibility list of string, 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.
 whole_static_libs list of string, Similar to static_libs, but will bundle the static library dependency into a library. This is helpful to avoid having to redeclare the dependency for dependents of this library, but in some cases may also result in bloat if multiple dependencies all include the same static library whole. The common use case for this is when the static library is unlikely to be a dependency of other modules to avoid having to redeclare the static library dependency for every dependent module. If you are not sure what to, for rust_library modules most static dependencies should go in static_libraries, and for rust_ffi modules most static dependencies should go into whole_static_libraries. For rust_ffi static variants, these libraries will be included in the resulting static library archive. For rust_library rlib variants, these libraries will be bundled into the resulting rlib library. This will include all of the static libraries symbols in any dylibs or binaries which use this rlib as well.