这是一个完整的 Android NDK 与 Rust 集成演示项目,展示了如何将 Rust 代码编译为 Android 动态库并在 Android 应用中使用。
- ✅ 完整的 Rust 库实现,包含多种 JNI 函数
- ✅ Android 应用 UI,支持多种功能测试
- ✅ 自动化的 Gradle 构建集成
- ✅ 支持多架构编译 (ARM64, ARM32, x86, x86_64)
- ✅ CMake 配置用于链接 Rust 库
- ✅ 完整的项目结构和配置文件
- 斐波那契计算 - 高性能的数学计算
- 字符串处理 - 字符串转换和格式化
- 数组求和 - 数组操作和数据处理
- 系统信息 - 获取编译和运行时信息
- 直观的 Material Design UI
- 实时结果显示
- 多种测试按钮
- 错误处理和用户反馈
Android App (Kotlin)
↓ JNI 调用
Rust Library (.so)
↓ 编译为
Android NDK 动态库
- Android Studio (最新版本)
- Android NDK (通过 SDK Manager 安装)
- Rust (通过 rustup 安装)
- Java 8+ 或 Java 11+
# 设置 Android NDK 路径
export ANDROID_NDK_HOME=/path/to/your/ndk
export ANDROID_NDK_ROOT=/path/to/your/ndk
# 验证 Rust 安装
rustc --version
cargo --version
# 运行设置脚本
chmod +x setup_rust_targets.sh
./setup_rust_targets.sh
# 或手动添加
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add i686-linux-android
rustup target add x86_64-linux-android
# 使用构建脚本
chmod +x build_rust.sh
./build_rust.sh
# 或手动编译
cd rust
cargo build --target aarch64-linux-android --release
# 在 Android Studio 中打开项目
# 或使用命令行构建
./gradlew assembleDebug
- 连接 Android 设备或启动模拟器
- 在 Android Studio 中点击运行按钮
- 或安装 APK:
./gradlew installDebug
rust_jni_demo/
├── rust/ # Rust 库项目
│ ├── Cargo.toml # Rust 项目配置
│ └── src/
│ └── lib.rs # Rust 库源码
├── app/ # Android 应用
│ ├── build.gradle.kts # 应用构建配置
│ └── src/main/
│ ├── java/com/example/rustndk/
│ │ └── MainActivity.kt # 主活动
│ ├── cpp/ # C++/NDK 代码
│ │ ├── CMakeLists.txt # CMake 配置
│ │ └── native-lib.cpp # C++ 示例代码
│ ├── res/ # Android 资源
│ └── AndroidManifest.xml # 应用清单
├── build.gradle.kts # 项目级构建配置
├── settings.gradle.kts # Gradle 设置
├── setup_rust_targets.sh # Rust 目标设置脚本
├── build_rust.sh # Rust 编译脚本
└── README.md # 项目文档
[lib]
name = "android_rust_lib"
crate-type = ["cdylib"] # 编译为 C 兼容的动态库
#[no_mangle]
pub extern "C" fn Java_com_example_rustndk_MainActivity_calculateFibonacci(
_env: JNIEnv,
_class: JClass,
n: jint,
) -> jint {
calculate_fibonacci(n)
}
tasks.register<Exec>("compileRust") {
workingDir = rustBasePath
commandLine("cargo", "build", "--target", "aarch64-linux-android", "--release")
environment("ANDROID_NDK_HOME", android.ndkDirectory.absolutePath)
}
add_library(android_rust_lib SHARED IMPORTED)
set_target_properties(android_rust_lib PROPERTIES
IMPORTED_LOCATION "${RUST_LIB_DIR}/libandroid_rust_lib.so"
)
- 内存安全: Rust 的内存安全特性如何避免 NDK 开发中的常见崩溃
- 性能优势: Rust 零成本抽象和编译时优化
- 构建集成: 深入理解 Gradle Task 系统和构建流程
- 跨平台: 多架构编译和部署策略
- 高性能计算模块
- 加密和安全功能
- 图像和音视频处理
- 网络协议实现
- 游戏引擎核心
- 与现有 C++ 代码的互操作
- 第三方 Rust crate 的集成
- 调试和性能分析工具
- CI/CD 自动化构建
A: 可以使用 android_log
crate 输出日志,或使用 GDB 进行调试。
A: 在 Rust 中使用 JNIEnv
的异常处理函数,在 Java 中捕获 UnsatisfiedLinkError
。
A: 使用 sccache
缓存编译结果,并行编译多个目标架构。
A: 在 Cargo.toml
中添加依赖,确保所有依赖都支持 Android 目标。
- Fork 项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建 Pull Request
MIT License - 详见 LICENSE 文件
如有问题或建议,请创建 Issue 或联系项目维护者。
注意: 这是一个演示项目,用于学习和面试准备。在生产环境中使用时,请确保进行充分的测试和安全审查。
- 有合适的rust岗位希望大家可以推荐,以后会陆续推出各种demo项目共大家研究学习,共同进步。
- 邮箱:storefee@163.com