本文由 简悦SimpRead 转码,原文地址 blog.wildcat.io
自从这个博客创建以来,我一直专注于移动和网络开发,近十年来......。
自从这个博客创建以来,我一直专注于移动和网络开发,已有近十年的时间。与此同时,Rust的普及率也在迅速增长。
关于用Rust进行移动开发的社区资源并不多,尽管Mozilla已经为Firefox Android/iOS使用Rust很长时间了。在调查了他们的Rust项目之后,现在是写一篇关于它的博客的好时机。
Rust为移动开发做好准备了吗?
简短的回答是 "是的"。
大多数知名的Rust的展示都是关于后台开发的。然而,你也可以找到很多关于它在客户端开发中的应用案例。
如果你想了解更多,这里有很好的参考资料。
拼图的关键部分
你可以写一个简单的带有C语言绑定的Rust库,在Swift/Objective-C或Java/Kotlin(JNI)中使用。然而,这并不是一个简单的方法。C绑定意味着大量的模板代码,而且很难维护。
幸运的是,Mozilla建立了两个关键的框架,对我们帮助很大。
- UniFFI( github.com/mozilla/uni… )。Rust APIs的自动代码生成
- Rust Android Gradle插件( github.com/mozilla/rus… )。无缝处理复杂的NDK构建脚本
使用Rust进行移动开发的例子
我使用Rust为一个移动应用建立了一个简单的代码库:github.com/imWildCat/u… 。我相信这些代码可以解释自己。但是提到一些技巧应该是不错的。
iOS
对于iOS,你需要为每个目标构建二进制,包括模拟器和设备(分别为英特尔和苹果CPU)。
通常情况下,你需要为这个矩阵构建。
| 目标 | CPU |
|---|---|
| 模拟器 | x86_64 |
| 模拟器 | aarch64 |
| 设备 | x86_64 |
| 设备 | aarch64 |
对于Rust的aarch64模拟器工具链,它不被稳定通道所支持。所以,你需要安装带有源代码的夜间工具链。类似的事情也适用于大多数Mac Catalyst目标。
rustup toolchain install nightly
rustup target add aarch64-apple-ios-sim --toolchain nightly
rustup target add aarch64-apple-ios x86_64-apple-ios
rustup component add rust-src --toolchain nightly
(链接到源代码)
关于Rust的平台支持的更多信息可以在doc.rust-lang.org/nightly/rus…找到。
Android
我们唯一需要小心的是Python 2在macOS 12.3上的移除。如果你想在macOS 12.3及更高版本上使用NDK构建Android库,你最好从源代码构建Python 2.x,并将其链接到/usr/local/bin/python。否则,构建很可能会失败。看到Python 2在2022年仍然是NDK工具链的一个依赖项,真是令人难过。
摘要
尽管Rust在移动领域的发展还处于早期阶段,但这种语言有很大的潜力。对我来说,最吸引人的特点是Rust的零成本抽象性。这意味着生成的二进制文件可以足够小,其性能也很好。由于许多像Mozilla这样的优秀团队已经在移动应用中使用它好几年了,现在是开始使用它的好时机。