0


Android Rust JNI系列教程(一) 环境配置

本系列文章将从

rust

环境搭建开始,逐步带大家了解使用

rust

进行

Android
JNI

开发的基本技能.相关文章共分为如下几步:

  1. Rust JNI环境搭建.
  2. 创建第一个Rust JNI项目
  3. RustAndroid互相调用
  4. Rust 调用Android API 实现签名验证
  5. Rust 使用openssl 实现Android签名验证

每一章文末都会稍带一些扩展知识,大家了解即可,真正需要时再去细究.

安装

Linux

或者

mac

上安装

rust

一行命令

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

如果你使用的是

Windows

系统,可以参考

https://www.rust-lang.org/tools/install

https://course.rs/first-try/installation.html

验证rust是否安装成功

  1. 验证rustc,命令行输入:
rustc --version  

安装成功的话会有如下输出:

rustc 1.65.0 (897e37553 2022-11-02)

其中

1.65.0 (897e37553 2022-11-02)

为版本号,读者们不必追求版本号与文章一致,以本地的版本号为准.

  1. 验证cargo,命令行输入:
cargo --version 

输出如下:

cargo 1.65.0 (4bc8f24d3 2022-10-20)

同样,

1.65.0 (4bc8f24d3 2022-10-20)

只是版本号,不必追求与文章一致.

交叉编译环境

  1. rust 安装交叉编译组件,其中:
aarch64-linux-android 

对应

arm64-v8a
armv7-linux-androideabi

对应

armeabi-v7a

我们以

aarch64-linux-android

为例,安装命令如下:

rustup target add aarch64-linux-android 
  1. 验证

安装完成后,使用以下命令进行验证:

rustup target list

获取输出如下:

aarch64-apple-darwin
aarch64-apple-ios
aarch64-apple-ios-sim
aarch64-fuchsia
aarch64-linux-android (installed)
aarch64-pc-windows-msvc
aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
aarch64-unknown-none
aarch64-unknown-none-softfloat
arm-linux-androideabi
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
arm-unknown-linux-musleabi
...

其中

aarch64-linux-android (installed)

,代表我们已经安装好

aarch64-linux-android

组件了.
同时我们也可以看到,rust交叉编译所支持的平台非常多,更加完整的介绍可见

https://doc.rust-lang.org/nightly/rustc/platform-support.html

.

  1. 配置config文件
  • ~/.cargo文件夹下,查看是否存在名为config的文件,不存在的话直接创建即可.
  • 编辑config文件,内容如下:
[target.aarch64-linux-android]
ar = "<path>/NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"
linker = "<path>/NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang"

另请注意,

rust

官方关于配置

ndk

的文档已经很久没更新过了,仅供参考

https://mozilla.github.io/firefox-browser-architecture/experiments/2017-09-21-rust-on-android.html

. 文中所说

${NDK_HOME}/build/tools/make_standalone_toolchain.py --api 26 --arch arm64 --install-dir NDK/arm64 

这部分操作已经不再需要了.在我的

NDK

版本

22.1.7171670

下已经内置了

aarch64-linux-android-ar

aarch64-linux-android30-clang

,不再需要重新编译.

扩展知识(了解即可,等到真正需要的时候再去研究)

cross (

https://github.com/cross-rs/cross

)

“Zero setup” cross compilation and “cross testing” of Rust crates

cross

这个工具会让交叉编译更简单,简单理解就是

cross

在容器里已经配置好了

NDK

等环境,我们只管开发完代码之后执行

 cross build --target aarch64-linux-android --release

就可编译出

android

对应的

arm64-v8a

so

文件了,不再需要在本机上再手动配置

NDK

config

文件.笔者本机环境

Ubuntu 22.04

使用

cross

编译

android

平台的

so

文件,

x86_64

Windows

可执行文件以及

mips

的路由器端可执行文件,使用起来很方便.

结语

本章结束后,本机环境信息如下

$ rustc --version                                                          
rustc 1.65.0 (897e37553 2022-11-02)
$ cargo --version                                                      
cargo 1.65.0 (4bc8f24d3 2022-10-20)
NDK

:

22.1.7171670

交叉编译组件:

aarch64-linux-android

我们将在此环境下开始接下来的

rust-jni

的学习.

Android

项目地址:

https://github.com/tangxuesong6/Android_Rust_JNI_Demo
rust

项目地址:

https://github.com/tangxuesong6/Rust_JNI_Demo

本文转载自: https://blog.csdn.net/songtangxue/article/details/128163291
版权归原作者 tangxuesong6 所有, 如有侵权,请联系我们删除。

“Android Rust JNI系列教程(一) 环境配置”的评论:

还没有评论