龙空技术网

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

不良猿 69

前言:

当前大家对“so文件算法android”大概比较讲究,我们都想要知道一些“so文件算法android”的相关知识。那么小编同时在网络上汇集了一些关于“so文件算法android””的相关知识,希望同学们能喜欢,同学们一起来学习一下吧!

这篇是关于Rust在Android端探索的第二篇,第一篇可以在这看: 探索Rust在Android端的使用(一)。

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

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

官方地址:GitHub - 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 ";        }    }    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学习笔记 - 探索Rust在Android端的使用(一)。

注意自己的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的安装包//  2. 安装完成之后,终端检查JDK版本java -version// 结果如下java version "17.0.8" 2023-07-18 LTSJava(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的编写。

标签: #so文件算法android