RUST
官方地址:https://www.rust-lang.org/zh-CN
优点
- RUST语言的特性。
- C++对Java开发者不友善,开发各种难。
- cargo支持第三方库直接导入[重点]。
缺点
- 新语言
- 语法稍微有点反人类
NDK配置
在环境变量中配置ANDROID_NDK_HOME
变量:
echo $ANDROID_NDK_HOME
# /Users/sollyu/Library/Android/sdk/ndk/21.0.6113669/
按照 https://github.com/bbqsrc/cargo-ndk 的步骤配置好cargo-ndk
。
创建工程
$ cargo new my_native --lib
# Created library `my_native` package
# 创建成功的目录结构
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 指定为动态库
修改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/
运行
创建一个安卓项目, 配置就像这样:
。