Android逆向分析63——当Flutter再次遇上Rust(By LittleQ)

admin 2024年4月15日19:37:00评论9 views字数 2285阅读7分37秒阅读模式

当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项目,是不是比较绕,哎对,这样你就集成完成了,完全不需要之前一套复杂的操作。

这里,就截一个图吧,不每个系统都截图了

Android逆向分析63——当Flutter再次遇上Rust(By LittleQ)

可以发现,他也是比较成功的。

老项目

对于老的项目,升级到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]
Reference
[1]

例如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)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月15日19:37:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android逆向分析63——当Flutter再次遇上Rust(By LittleQ)https://cn-sec.com/archives/2660966.html

发表评论

匿名网友 填写信息