50 个版本 (稳定)
新版本 3.5.7 | 2024 年 8 月 19 日 |
---|---|
3.5.6 |
|
3.5.4 | 2024 年 4 月 13 日 |
3.4.0 | 2023 年 9 月 23 日 |
0.1.3 | 2018 年 7 月 22 日 |
#21 in Cargo 插件
41,452 每月下载量
68KB
1.5K SLoC
cargo-ndk - 为 Android 构建 Rust 代码
此 cargo 扩展处理从 Rust 代码库成功构建 Android 库所需的所有环境配置,支持生成正确的 jniLibs
目录结构。
安装
cargo install cargo-ndk
您还需要安装所有打算使用的工具链。最简单的方法是使用以下命令
rustup target add \
aarch64-linux-android \
armv7-linux-androideabi \
x86_64-linux-android \
i686-linux-android
根据您的使用情况进行必要的修改。
用法
如果您已将 NDK 安装到 Android Studio 的默认位置,cargo ndk
将自动检测最新的 NDK 版本并使用它。这可以通过在 ANDROID_NDK_HOME
环境变量中指定 NDK 根目录的路径来覆盖。
示例
为 32 位和 64 位 ARM 系统构建库
cargo ndk -t armeabi-v7a -t arm64-v8a -o ./jniLibs build --release
这指定了要构建的 Android 目标(也支持普通三重),用于放置 Android 期望的 .so
文件的输出目录,然后是传递给 cargo
的普通标志。
将 libc++_shared.so
链接到输出目录的相关位置并复制
在您的项目中创建一个 build.rs
文件,内容如下
use std::{env, path::{Path, PathBuf}};
fn main() {
if env::var("CARGO_CFG_TARGET_OS").unwrap() == "android" {
android();
}
}
fn android() {
println!("cargo:rustc-link-lib=c++_shared");
if let Ok(output_path) = env::var("CARGO_NDK_OUTPUT_PATH") {
let sysroot_libs_path =
PathBuf::from(env::var_os("CARGO_NDK_SYSROOT_LIBS_PATH").unwrap());
let lib_path = sysroot_libs_path.join("libc++_shared.so");
std::fs::copy(
lib_path,
Path::new(&output_path)
.join(&env::var("CARGO_NDK_ANDROID_TARGET").unwrap())
.join("libc++_shared.so"),
)
.unwrap();
}
}
控制详细程度
添加 -v
或 -vv
,就像您通常在 cargo 命令之后做的那样。
提供 C 依赖项的环境变量
cargo-ndk
以与 cc
包相同的方式推导要读取哪些环境变量。
cargo-ndk
特定的环境变量
这些环境变量已导出供构建脚本和其他下游用例使用
CARGO_NDK_ANDROID_PLATFORM
:Android平台API编号(整数值,例如21
)CARGO_NDK_ANDROID_TARGET
:构建目标的Android名称(例如armeabi-v7a
)CARGO_NDK_OUTPUT_PATH
:使用-o
标志指定的输出路径CARGO_NDK_SYSROOT_PATH
:Android NDK中sysroot的路径CARGO_NDK_SYSROOT_TARGET
:sysroot中文件的目标名称(与标准LLVM triples略有不同)CARGO_NDK_SYSROOT_LIBS_PATH
:给定sysroot目标的sysroot中库的路径(例如$CARGO_NDK_SYSROOT_PATH/usr/lib/$CARGO_NDK_SYSROOT_TARGET
)
打印环境变量
有时您只想查看 cargo-ndk
配置的环境变量,以便您可以在 VS Code 或类似的环境中设置 rust-analyzer。
如果要将它源到您的bash环境中
source <(cargo ndk-env)
PowerShell
cargo ndk-env --powershell | Out-String | Invoke-Expression
Rust Analyzer 以及任何其他基于 JSON 的环境处理的工具
要配置 rust-analyzer,请添加 --json
标志并将 blob 粘贴到配置中的相关位置。
支持的主机
- Linux
- macOS(
x86_64
和arm64
) - Windows
本地开发
git clone
然后使用 cargo
安装 crate
cargo install --path .
类似的项目
- cargo-cocoapods - 用于构建所有 Apple 平台的 .a 文件,并捆绑为 CocoaPods
许可
本项目许可为以下之一
- Apache License,版本 2.0(《LICENSE-APACHE》或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可(《LICENSE-MIT》或 http://opensource.org/licenses/MIT)
任选其一。
依赖
~3–12MB
~138K SLoC