rust-jni-android

Crates.iorust-jni-android
lib.rsrust-jni-android
version1.0.0
created_at2026-01-15 03:40:15.880482+00
updated_at2026-01-15 03:40:15.880482+00
descriptionRust JNI bindings for Android - seamlessly integrate Rust code into Android applications
homepage
repositoryhttps://github.com/yourusername/RustAndroid
max_upload_size
id2044507
size13,311
chenyan (chenyan2010)

documentation

https://docs.rs/rust-jni-android

README

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                   # 项目文档

🚀 快速开始

前置要求

  1. 安装 Rust

    # 访问 https://rustup.rs/ 安装 Rust
    # 或使用以下命令(Linux/macOS):
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  2. 添加 Android 交叉编译目标

    rustup target add aarch64-linux-android
    rustup target add armv7-linux-androideabi
    

构建和运行

  1. 编译项目

    ./gradlew assembleDebug
    
  2. 在 Android Studio 中运行

    • 点击Run按钮或按 Shift + F10

🔧 工作原理

1. Rust 侧(rust-jni/src/lib.rs)

#[unsafe(no_mangle)]
pub extern "C" fn Java_com_example_rustandroid_RustJni_hello<'local>(
    mut env: JNIEnv<'local>,
    _class: JClass<'local>,
    input: JString<'local>,
) -> jstring {
    // Rust 原生代码处理逻辑
    let input_str: String = env.get_string(&input).unwrap().into();
    let output = env.new_string(format!("Hello, {}! (from Rust)", input_str)).unwrap();
    output.into_raw()
}

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 优化

项目配置了多项编译优化以减小库体积和提升性能:

[profile.release]
opt-level = 3       # 最大优化级别
lto = true          # 链接时优化
codegen-units = 1   # 单线程编译获得最佳优化
strip = true        # 去除调试符号
panic = 'abort'     # panic 时直接终止

Android 15+ 适配

支持 16KB 页面大小,适配 Android 15 及更高版本:

environment "${envVarPrefix}_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 包名和类名匹配

📚 学习资源

Commit count: 0

cargo fmt