RUST NDK開發(fā)—HelloWorld

RUST

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

優(yōu)點(diǎn)

  1. RUST語言的特性。
  2. C++對(duì)Java開發(fā)者不友善,開發(fā)各種難。
  3. cargo支持第三方庫直接導(dǎo)入[重點(diǎn)]。

缺點(diǎn)

  1. 新語言
  2. 語法稍微有點(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)目, 配置就像這樣:


。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容