RustAndroid
本项目展示了如何在 Android 应用中集成 Rust 原生库,结合了:
- Rust: 用于编写高性能的原生代码
- JNI: 作为 Rust 和 Android 之间的桥梁
🏗️ 项目结构
RustAndroid/
├── app/ # Android 应用模块
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/example/rustandroid/
│ │ │ │ ├── MainActivity.kt # 主活动
│ │ │ │ └── RustJni.kt # JNI 接口封装
│ │ │ ├── jniLibs/ # 编译后的 .so 文件存放位置
│ │ │ │ ├── arm64-v8a/
│ │ │ │ └── armeabi-v7a/
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ └── build.gradle # Android 构建配置
│
├── rust-jni/ # Rust 原生库
│ ├── src/
│ │ └── lib.rs # Rust JNI 实现
│ ├── Cargo.toml # Rust 项目配置
│ └── target/ # Rust 编译产物
│
├── build.gradle # 根项目构建配置
├── settings.gradle # Gradle 设置
└── README.md # 项目文档
🚀 快速开始
前置要求
-
安装 Rust
# 访问 https://rustup.rs/ 安装 Rust # 或使用以下命令(Linux/macOS): | -
添加 Android 交叉编译目标
构建和运行
-
编译项目
-
在 Android Studio 中运行
- 点击Run按钮或按
Shift + F10
- 点击Run按钮或按
🔧 工作原理
1. Rust 侧(rust-jni/src/lib.rs)
pub extern "C"
2. Android 侧(RustJni.kt)
object RustJni {
init {
System.loadLibrary("rust_jni") // 加载 Rust 编译的 .so 库
}
@JvmStatic
external fun hello(input: String): String // 声明原生方法
}
3. 自动化编译流程
项目在 app/build.gradle 中配置了自动化的 Rust 编译任务:
- buildRust: 为所有目标架构编译 Rust 代码
- cleanRust: 清理 Rust 编译产物
- 自动在构建前执行 Rust 编译
⚙️ 优化配置
Rust Release 优化
项目配置了多项编译优化以减小库体积和提升性能:
[]
= 3 # 最大优化级别
= true # 链接时优化
= 1 # 单线程编译获得最佳优化
= true # 去除调试符号
= 'abort' # panic 时直接终止
Android 15+ 适配
支持 16KB 页面大小,适配 Android 15 及更高版本:
environment "_RUSTFLAGS", "-C link-arg=-Wl,-z,max-page-size=16384"
🐛 常见问题
1. Rust 编译失败
问题: cargo 命令未找到或编译失败
解决方案:
- 确保已安装 Rust:
rustup --version - 确保已添加 Android 目标:
rustup target list --installed - 检查环境变量配置
2. JNI 方法未找到
错误: "UnsatisfiedLinkError: No implementation found"
解决方案:
- 检查 Rust 函数名是否与 Kotlin 包名和类名匹配