当Flutter再次遇上Rust(By LittleQ)
最近,其实也不是最近,flutter_rust_bridge
更新了,更新了有一段时间了,经过这一段时间的体验呢,目前,应该是有的坑算是踩的差不多了,因此呢,这篇文章来了第三期,为什么它更新了,值得发一篇新的文章呢,是因为,新版本带来了更加优雅的写法,如果没看过之前的文章的,可以自行去看一下之前的文章。
前情回顾
我们先来回顾一下之前的写法,我们需要手动的添加一堆的文件,然后针对不同的平台做相应的配置,如果不熟悉的,还是,可以看一下我之前写的文章,这种写法呢,其实有几个问题。
-
首先呢,配置比较繁琐 -
其次呢,如果说MacOS进行更新的时候,签名需要单独处理下
这个,其实也不算是大问题,搞好了就行了,但是,对于新版本的依赖库呢,它改进了引入的方式,使得集成Rust和Flutter变得特别的简单了起来,但是还是有一些问题,至于什么问题呢,我们稍后再聊。
新特性
-
快速设置:只需一行命令就能集成到你的项目中。 -
任意类型:无需手动干预,就能使用任意Rust和Dart类型,即使它们不可序列化或不可克隆(之前需要一些手动干预)。 -
异步Rust:支持异步Rust(async fn),此外还支持同步Rust/异步Dart/同步Dart。 -
Rust调用Dart:允许Rust调用Dart函数(之前只允许Dart调用Rust)。 -
支持整个文件夹作为输入:之前只支持单个文件(例如api.rs[1])。 -
在Flutter/Rust中使用库/工具:所有现有的库、Flutter调试器......没有什么能阻止你使用它们。 -
新编解码器:一种新的编解码器,SSE,在典型工作负载下速度比以前快数倍。
这些新特性呢,来自于官方的文档,感兴趣的可以自己去看看。
集成方式
新项目
这个引入,其实非常的简单,如果是一个新的项目,执行下面的命令
cargo install 'flutter_rust_bridge_codegen@^2.0.0-dev.0' &&
flutter_rust_bridge_codegen create my_app && cd my_app && flutter run
这样,你就得到了一个新的包含着rust的flutter项目,是不是比较绕,哎对,这样你就集成完成了,完全不需要之前一套复杂的操作。
这里,就截一个图吧,不每个系统都截图了
可以发现,他也是比较成功的。
老项目
对于老的项目,升级到v2也是非常的简单。
-
通常,你只需要运行 flutter_rust_bridge_codegen integrate。 -
将原始Rust代码(例如在api.rs中)移动到rust/src/api/simple.rs。(你也可以分成多个文件,例如apple.rs[2], orange.rs等。) -
通过运行 flutter_rust_bridge_codegen generate --watch 来运行代码生成器并监视代码变化。修复编译错误(通常只是重命名或重新定位)和运行时异常(通常有提示)。 -
通过撤销之前完成的更改,清理之前将Rust与Flutter集成的操作。
当然,一些不兼容的东西,还是需要自己稍微处理处理,具体的参见文档中的参考指南,这里就不过多赘述了,其实大部分都是不用改的,只需要稍微微调一下,然后暴力点的方法就是删掉其他平台的文件,重新创建,或者自己根据添加的内容,反向操作一波。
存在的问题
目前,这一种模式存在一个小问题,不过如果你不用isolate,便不会有这个问题,如果用了isolate,你需要重新初始化,具体可以看参考资料3。
总结
在这篇文章中,我们讨论了flutter_rust_bridge
包的最新更新,这个库极大地简化了Rust和Flutter之间的集成。更新后的库引入了一些新特性,从而改善了开发体验,使得开发人员可以更加高效地编写跨平台应用程序,好了,本文到这里就结束了,溜了,溜了。
参考资料
-
https://cjycode.com/flutter_rust_bridge/[3] -
https://cjycode.com/flutter_rust_bridge/guides/miscellaneous/upgrade/v2[4] -
https://github.com/fzyzcjy/flutter_rust_bridge/pull/1699[5]
例如api.rs: http://xn--api-uc0ep96b.rs/
[2]例如apple.rs: http://xn--apple-4d3hh90d.rs/
[3]https://cjycode.com/flutter_rust_bridge/: https://cjycode.com/flutter_rust_bridge/
[4]https://cjycode.com/flutter_rust_bridge/guides/miscellaneous/upgrade/v2: https://cjycode.com/flutter_rust_bridge/guides/miscellaneous/upgrade/v2
[5]https://github.com/fzyzcjy/flutter_rust_bridge/pull/1699: https://github.com/fzyzcjy/flutter_rust_bridge/pull/1699
原文始发于微信公众号(安全后厨):Android逆向分析63——当Flutter再次遇上Rust(By LittleQ)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论