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

2023-05-16

本系列文章将从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/installhttps://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-araarch64-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-v8aso文件了,不再需要在本机上再手动配置NDKconfig文件.笔者本机环境Ubuntu 22.04使用cross编译android平台的so文件,x86_64Windows可执行文件以及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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Rust JNI系列教程(一) 环境配置 的相关文章

  • proxmox VE备份优化手记--两次优化,大幅度提高性能

    问题描述 某项目由两套proxmox组成 xff0c 一套运行所有的应用程序 xff0c 一台运行mysql数据库 为了保险起见 xff0c proxmox外挂共享存储 xff0c 夜间对所有的虚拟机进行自动备份 备份是用的一台4U服务器
  • 开源超融合私有云神器proxmox VE

    Prxomox VE由位于奥地利维也纳的Proxmox Server Solutions GmbH开发 xff0c 这让人有点意外 其实欧洲在IT技术方面 xff0c 还是很强的 xff0c 比如大名鼎鼎的mysql xff0c 出自瑞典
  • Proxmox VE 桌面虚拟化(windows 10)集群尝试

    一家小型企业 内部有几台服务器 办公电脑40几台 这些服务器都是单点 经历过一次财务服务器损坏 好几周都不能开展业务的惨痛教训 正对这种问题 可采用proxmox超融合集群来解决业务高可用问题 但考虑到它的业务服务器数量不多 用超融合集群专
  • Promox VE日常维护

    Promox VE超融合私有云部署并用于生产系统以后 并不能一劳永逸 这仅仅是万里长征走完了第一步 虽然超融合私有云本身提供了非常高的可用性 但并不保证整个系统在运行中不会整体崩溃 因此 好的系统加上好的维护 才是正途 Promox VE超
  • PBS(proxmox backup server)尝鲜记

    作者 xff1a 田逸 xff08 vx xff1a formyz xff0c mail xff1a sery 64 163 com xff09 终于等到pbs发布正式版本pbs 1 0 迫不及待去官网下载好proxmox backup s
  • 打造炫酷的Proxmox VE 监控界面

    打造炫酷的Proxmox VE 监控界面 今天终于把Proxmox VE xff08 简称PVE xff09 从6 1版本升级到PVE 6 4版本 xff0c 在Web管理后台对比PVE 6 4与 PVE 6 1 xff0c 看新增哪些功能
  • Proxmox VE 多机系统备份

    作者 xff1a 田逸 在我管控的项目里 xff0c 有Proxmox VE集群 xff0c 也有些单独的PVE 我打算把集群上的虚拟机 单机PVE上的虚拟机 xff0c 都备份到同一个大容量存储 这样规划 xff0c 即能有效利用资源 x
  • Proxmox VE 超融合集群实践真传

    第1章 老司机眼中的私有云 3 1 1私有云的定义 3 1 2私有云适用场景 4 1 3私有云行业现状 6 1 4私有云技术要求 xff08 针对Proxmox VE平台 xff09 7 第2章 开源私有云神器Proxmox VE 8 2
  • Proxmox VE 超融合集群创建多个Ceph Pool

    作者 xff1a 田逸 xff08 vx formyz xff09 创建多Ceph Pool的目的 Proxmox VE集群上的虚拟机运行在高速磁盘NVME 而虚拟机附属的数据 xff0c 则指定到低速 廉价 容量大的磁盘空间 为了高可用性
  • Proxmox VE 超融合集群OVS(Open vSwitch)虚拟机网络隔离

    作者 xff1a 田逸 需求的产生 在一个高配置的Proxmox VE 超融合集群中 xff0c 为充分利用资源 xff0c 需要按某种需求将虚拟机之间进行网络隔离 xff0c 以支持更大规模的场景 网络虚拟化基本条件 支持VLAN的网络交
  • 第1章 Rust安装

    Rust是一门安全的语言 xff0c 最近也加入到Linux内核中 xff0c 因此后续这门语言会越来越流行 xff0c 所以准备学习下 xff0c 本篇介绍Rust在Window平台上的安装过程 目录 安装步骤 1 到官网下载安装包 2
  • Proxmox VE 7.0升级到Proxmox VE 7.1虚拟机重启失败

    一单节点pve xff0c 版本为7 0 xff0c 顺手刷了一下更新 xff0c 升级到版本7 1 因为对其中的一个Centos 7虚拟机执行了yum update 重启此虚拟机 xff0c 启动失败 xff0c 尝试多次皆如此 kvm
  • Proxmox VE 修改集群名称

    作者 xff1a 田逸 xff08 formyz Proxmox VE集群一旦创建 xff0c 其集群的名称就固定下来 在Proxmox VE Web管理后台 xff0c 没有相应的菜单或按钮对应与集群名称的修改 xff08 仅仅发现修改虚
  • 第3章 高可用负载均衡集群规划

    作者 xff1a 田逸 xff08 formyz xff09 开篇之初 xff0c 先举几个反例 xff0c 来说明事前规划的重要性 案例一 xff1a 某广告媒体公司 xff0c 需要部署一套媒体播放系统 xff0c 由一台应用服务器和一
  • 《企业级Linux高可用负载均衡集群实践真传》目录

    第1章 关于负载均衡 2 1 1 负载均衡定义 2 1 2 负载均衡在生产环境中的基本要求 3 1 2 1 在线可扩展性 3 1 2 2 高可用性 3 1 2 3 多服务性 4 1 3 负载均衡基本功能 4 1 3 1 负载均衡 4 1 3
  • 4.3 实施部署Nginx 高可用负载均衡集群

    作者 xff1a 田逸 xff08 formyz xff09 部署大致可分为 xff1a 准备工作 配置 验证与交付几个步骤 xff0c 接下来按顺序逐一介绍 4 3 1 准备工作 Nginx高可以负载均衡集群准备工作分两个层面 xff1a
  • xrdp设置开机自启动 update-rc.d xrdp enable

    xrdp设置开机自启动 update rc d xrdp enable
  • FreeRDP 编译和使用介绍

    FreeRDP 编译和使用介绍 FreeRDP是开源的 xff0c 免费的RemoteDesktop Protocol RDP 执行版本 xff0c 它支持多个操作系统平台如Windows xff0c Linux和Android 源代码下载
  • CCF201809-3 元素选择器

    试题编号 xff1a 201809 3试题名称 xff1a 元素选择器时间限制 xff1a 1 0s内存限制 xff1a 256 0MB问题描述 xff1a 版本一 xff08 时间 xff1a 2018 10 23 xff09 xff08
  • CCF201812-4 数据中心

    试题编号 xff1a 201812 4试题名称 xff1a 数据中心时间限制 xff1a 1 0s内存限制 xff1a 512 0MB问题描述 xff1a 样例输入 4 5 1 1 2 3 1 3 4 1 4 5 2 3 8 3 4 2 样

随机推荐