| Crates.io | rust-jni-android |
| lib.rs | rust-jni-android |
| version | 1.0.0 |
| created_at | 2026-01-15 03:40:15.880482+00 |
| updated_at | 2026-01-15 03:40:15.880482+00 |
| description | Rust JNI bindings for Android - seamlessly integrate Rust code into Android applications |
| homepage | |
| repository | https://github.com/yourusername/RustAndroid |
| max_upload_size | |
| id | 2044507 |
| size | 13,311 |
本项目展示了如何在 Android 应用中集成 Rust 原生库,结合了:
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):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
添加 Android 交叉编译目标
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
编译项目
./gradlew assembleDebug
在 Android Studio 中运行
Shift + F10#[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()
}
object RustJni {
init {
System.loadLibrary("rust_jni") // 加载 Rust 编译的 .so 库
}
@JvmStatic
external fun hello(input: String): String // 声明原生方法
}
项目在 app/build.gradle 中配置了自动化的 Rust 编译任务:
项目配置了多项编译优化以减小库体积和提升性能:
[profile.release]
opt-level = 3 # 最大优化级别
lto = true # 链接时优化
codegen-units = 1 # 单线程编译获得最佳优化
strip = true # 去除调试符号
panic = 'abort' # panic 时直接终止
支持 16KB 页面大小,适配 Android 15 及更高版本:
environment "${envVarPrefix}_RUSTFLAGS", "-C link-arg=-Wl,-z,max-page-size=16384"
问题: cargo 命令未找到或编译失败
解决方案:
rustup --versionrustup target list --installed错误: "UnsatisfiedLinkError: No implementation found"
解决方案: