记录一次windows环境rust和android交叉编译

本文假定cargo和rust已安装,如果没有安装 自行百度,一般不会有问题。编辑器推荐使用vscode

1.首先下载好sdk:

找到 `Android SDK > SDK Tools`,如果是在Android studio中,setting中寻找:`Android Studio > Preferences > Appearance & Behaviour > Android SDK > SDK Tools`。最后检查一下选项:

```

* Android SDK Tools

* NDK

* CMake

* LLDB

```

2.配置环境变量(配置方法自行百度):

ANDROID_HOME = SDK的根目录

ANDROID_NDK_HOME   也有可能是 NDK_HOME  = NDK的根目录

3.创建NDK目录(所需较大硬盘空间) 用到 python:

cd 到NDK的tools目录底下有个 make_standalone_toolchain.py  文件用命令

python3  make_standalone_toolchain.py --api 30 --arch arm64 --install-dir NDK/arm64

python3  make_standalone_toolchain.py --api 30 --arch arm --install-dir NDK/arm

python3  make_standalone_toolchain.py --api 30 --arch x86 --install-dir NDK/x86

4.项目交叉编译配置:

创建`cargo-config.toml`文件,将NDK地址配置在里面,以及cpu架构对应的配置:

```.env

[target.aarch64-linux-android]

ar = "{yourpath}\\arm64\\bin\\aarch64-linux-android-ar.exe"

linker = "{yourpath}\\arm64\\bin\\aarch64-linux-android-clang.cmd"

[target.armv7-linux-androideabi]

ar = "{yourpath}\\arm\\bin\\arm-linux-androideabi-ar.exe"

linker = "{yourpath}\\arm\\bin\\arm-linux-androideabi-clang.cmd"

[target.i686-linux-android]

ar = "{yourpath}\\x86\\bin\\i686-linux-android-ar.exe"

linker = "{yourpath}\\x86\\bin\\i686-linux-android-clang.cmd"

```

5.将cargo交叉编译配置信息添加到cargo目录下:

复制配置文件

复制cargo-config.toml  到.cargo/config  .cargo这个文件夹一般在用户应用数据文件夹里面没有config文件 就新建一个

继续添加新创建的Android体系结构,rustup以便我们可以在交叉编译期间使用它们:

rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android

6.rust jni配置:

我们声明需要jni包地址,这意味着我们需要在`Cargo.toml`文件中包含包装箱。打开它,并在`[package]`和`[lib]`声明之间添加以下内容。

```.env

[target.'cfg(target_os="android")'.dependencies]

jni = { version = "0.16.0", default-features = false }

```

指定交叉编译的库,在`Cargo.toml`文件中的`[lib]`部分中指定,Android所需的是动态库,`.so`后缀

```.env

[lib]

crate-type = ["cdylib"]

```

7.执行编译

在Terminal中打开项目地址,导航到`cargo`目录下运行以下命令

```.env

cargo build --target aarch64-linux-android --release

cargo build --target armv7-linux-androideabi --release

cargo build --target i686-linux-android --release

```

运行后生成的路径在:

```

<project path>/target

```

其中生成包与Android studio `jniLibs` 下架构对应为:

```.env

arm64-v7a = aarch64-linux-android

armeabi-v7a = armv7-linux-androideabi

x86 = i686-linux-android

```

生成so包之后,使用方式与c的so包一致。

ps:遇到了一些坑,当项目中有依赖openssl或者 依赖的依赖有引入openssl,一定要记住下载对应版本的openssl,比如 我这边是要编译android使用的,就下载openssl:arm-android或者openssl:arm64-android。

windows推荐使用vcpkg包管理器,配置好vcpkg的环境变量下载openssl,配置好openssl的环境变量。

至于C,C++环境的问题,比如出现了clang   gcc clang++等一系列问题, 下载visual studio 配置选项可以解决。

总结:环境的问题很头疼,资料又少,这个openssl的问题卡了我很久,希望广大程序猿们 不要遇到这种类似问题,很伤头发。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值