RUST
官方地址:https://www.rust-lang.org/zh-CN
優(yōu)點(diǎn)
- RUST語言的特性。
- C++對(duì)Java開發(fā)者不友善,開發(fā)各種難。
- cargo支持第三方庫直接導(dǎo)入[重點(diǎn)]。
缺點(diǎn)
- 新語言
- 語法稍微有點(diǎn)反人類
NDK配置
在環(huán)境變量中配置ANDROID_NDK_HOME變量:
echo $ANDROID_NDK_HOME
# /Users/sollyu/Library/Android/sdk/ndk/21.0.6113669/
按照 https://github.com/bbqsrc/cargo-ndk 的步驟配置好cargo-ndk。
創(chuàng)建工程
$ cargo new my_native --lib
# Created library `my_native` package
# 創(chuàng)建成功的目錄結(jié)構(gòu)
my_native
├── Cargo.toml 倉庫配置文件和build.gradle很像
└── src
└── lib.rs 主要代碼,文件名不能隨意改變
代碼
打開Cargo.toml,在最后增加:
[package]
name = "my_native"
version = "0.1.0"
authors = ["Baidu Admin <admin@baidu.com>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
# 中央倉庫地址:https://crates.io/
[dependencies]
jni = "0.17.0" # 增加jni支持
[lib]
name = "my_native" # 輸出的文件名:libmy_native
crate-type = ["cdylib"] # 編譯類型 cdylib 指定為動(dòng)態(tài)庫
修改lib.rs代碼如下:
#![cfg(target_os = "android")]
use jni::JNIEnv;
use jni::objects::{JObject};
use jni::sys::jstring;
#[no_mangle]
pub extern fn Java_com_sollyu_rust_MainActivity_stringFromJNI(
env: JNIEnv, _: JObject) -> jstring {
env.new_string("Hello from Rust")
.expect("Couldn't create java string!")
.into_inner()
}
打包
參照cargo-ndk的打包方式:
cargo ndk --platform 21 --target armv7-linux-androideabi build --release
cargo ndk --platform 21 --target aarch64-linux-android build --release
cargo ndk --platform 21 --target x86_64-linux-android build --release
cargo ndk --platform 21 --target i686-linux-android build --release

打包成功輸出的so地址在:target/armv7-linux-androideabi/release/

運(yùn)行
創(chuàng)建一個(gè)安卓項(xiàng)目, 配置就像這樣:


。