Rust学习笔记 - 探索Rust在Android端的使用(二)

Rust学习笔记 - 探索Rust在Android端的使用(二)

首页枪战射击Code Name X手游更新时间:2024-06-29

这篇是关于rust在Android端探索的第二篇,第一篇可以在这看:。

上一篇,难得有网友评论,说是太麻烦了,mozilla有提供编译rust的插件, 故学习学习。

Rust使用mozilla开源的rust-android-gradle插件进行编译

官方地址:

这个探索过程中,也遇到了一些问题,不过总体来说也算顺利,整理如下:

步骤1: 编辑项目的build.gradle文件,添加rust-android-gradle插件

详细代码如下:

// Top-level build File where you can add configuration options common to all sub-projects/modules. buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath 'org.mozilla.rust-android-gradle:plugin:0.9.3' } } plugins { id 'com.android.application' version '8.0.1' apply false id 'com.android.library' version '8.0.1' apply false }

步骤2: 编辑应用模块的build.gradle文件,编写要编译的rust模块

关于Android和Rust的测试工程,上一篇有写:。

注意自己的Rust库工程的Cargo.toml位置。

plugins { id 'com.android.application' } apply plugin: 'org.mozilla.rust-android-gradle.rust-android' cargo { module = "../../rust_sdk/" // Or whatever directory contains your Cargo.toml libname = "rust_sdk" // Or whatever matches Cargo.toml's [package] name. targets = ["arm64"] // See bellow for a longer list of options apiLevel = 33 proFile = 'release' } android { namespace 'com.example.hellorust' compileSdk 33 defaultConfig { applicationId "com.example.hellorust" minSdk 24 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidjunitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }

步骤3: 编译的Rust模块

使用IDE内置的终端运行:./gradlew cargoBuild,如下图:

运行顺利的话,会生成目标的.so文件。如下图:

Rust编译遇到的错误

我这里主要是遇到一个错误,就是JDK的错误,内置终端运行./gradlew cargoBuild,遇到了下面错误:

大致意思是我mac电脑的JDK环境是Java8(jdk1.8), IDE声明的JDK环境是java11(jdk17)。

换句话说就是,终端编译使用的JDK环境是Mac系统的JDK环境,IDE编译使用的JDK环境是IDE自己指定的环境

知道了这个,就好解决了。

步骤1: 检查mac环境,发现mac的jdk版本为1.8

// 当前操作电脑是mac, 故这里就用mac来说明了 // 检查mac的环境 java -version // 结果显示如下 java version "1.8.0 211" Java(TM) SE Runtime Environment (build 1.8.0 211-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12,mixed mode)

步骤2: 检查IDE环境,发现IDE的jdk版本为17.0.6

查看IDE的JDK版本路径: File --> Project structure... 如下图:

步骤3: 同步系统JDK与IDE的JDK版本

这里我这里IDE选择JDK版本1.8的话,grade同步又出现问题,大概是grade的插件版本与JDK1.8不兼容吧,所以这里我就没改IDE里的JDK版本了。

直接改mac系统的JDK版本,我是直接选择从JDK官网下载安装。步骤如下:

// 1. 从JDK官网下载JDK17的安装包 // https://www.oracle.com/java/technologies/downloads/#jdk17-mac // 2. 安装完成之后,终端检查JDK版本 java -version // 结果如下 java version "17.0.8" 2023-07-18 LTS Java(TM) SE Runtime Environment (build 17.0.8 9-LTS-211) Java HotSpot(TM) 64-Bit Server VM (build 17.0.8 9-LTS-211, mixed mode, sharing) // 3. 系统JDK与IDE JDK版本一样之后,在IDE内置终端再次运行 ./gradlew cargoBuild总结

这个插件探索下来,和上一篇自己写脚本编译android的动态库文件相比,简单多了。但这两种方法也还好,并不是很难,难的地方, 我感觉还是jni的编写。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved