自 2025 年 3 月 27 日起,我们建议您使用 android-latest-release
而非 aosp-main
构建 AOSP 并为其做出贡献。如需了解详情,请参阅 AOSP 的变更。
二进制模块
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
您可以使用 rust_binary
模块类型生成 Rust 二进制文件;例如:
rust_binary {
name: "hello_rust",
srcs: ["src/hello_rust.rs"],
}
同样,您也可以使用 rust_binary_host
提供主机专用模块。
值得注意的 rust_binary 属性
除了重要的通用属性之外,以下属性也很重要,或者具有特定于 rust_binary
模块类型的独有行为:
- static_executable:将此二进制文件构建为静态二进制文件,并且表示
prefer_rlib
为 true
。只能为 Bionic 目标生成完全静态的可执行文件。对于非 Bionic 目标,这仅意味着 prefer_rlib
为 true
,但仍动态关联 libc
和 libdl
。
- prefer_rlib:将
rustlibs
关联更改为在默认情况下为设备目标选择 rlib
关联,并关联 libstd
作为设备目标上的 rlib
。请注意,这是主机目标的默认行为,并且对主机目标没有影响。
关联
默认情况下,以设备为目标的 rust_binary
模块始终动态关联到 libstd
,并默认为 rustlibs
中列出的依赖项优先使用 dylib
库,除非 prefer_rlib
为 true
。如果需要完全静态的二进制文件,请参阅 static_executable
属性。
主机模块始终静态关联到 libstd
,并默认 rustlibs
中列出的依赖项优先使用 rlib
库。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-04-04。
[null,null,["最后更新时间 (UTC):2025-04-04。"],[],[],null,["# Binary modules\n\nRust binaries can be produced using the `rust_binary` module type; for example: \n\n rust_binary {\n name: \"hello_rust\",\n srcs: [\"src/hello_rust.rs\"],\n }\n\nSimilarly, you can use `rust_binary_host` to provide a host-only\nmodule.\n\nNotable rust_binary properties\n------------------------------\n\nIn addition to the [Important common properties](/docs/setup/build/rust/building-rust-modules/android-rust-modules#important-common-properties),\nthe following properties are also either important, or exhibit unique behavior\nspecific to the `rust_binary` module type:\n\n- **static_executable** : Builds this binary as a static binary, and implies `prefer_rlib` is `true`. Fully static executables can only be produced for bionic targets. For non-bionic targets, this implies only that `prefer_rlib` is `true`, but it still links `libc` and `libdl` dynamically.\n- **prefer_rlib** : Changes the `rustlibs` linkage to select the `rlib` linkage by default for device targets, and links `libstd` as an `rlib` on device targets. Note that this is the default behavior for host targets, and has no impact on them.\n\nLinkage\n-------\n\nBy default, `rust_binary` modules that are targeting devices are always linked\ndynamically against `libstd` and by default will prefer `dylib` libraries for\ndependencies listed in `rustlibs` unless `prefer_rlib` is `true`. If fully\nstatic binaries are required, see the `static_executable` property.\n\nHost modules are always linked statically against `libstd` and\nby default prefer `rlib` libraries for dependencies that are listed in\n`rustlibs`."]]