RUST NDK开发—HelloWorld

RUST

官方地址:https://www.rust-lang.org/zh-CN

优点

  1. RUST语言的特性。
  2. C++对Java开发者不友善,开发各种难。
  3. cargo支持第三方库直接导入[重点]。

缺点

  1. 新语言
  2. 语法稍微有点反人类

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 "]
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/

运行

创建一个安卓项目, 配置就像这样:


你可能感兴趣的:(RUST NDK开发—HelloWorld)