Written by: algebnaly
Date: 2026-01-13T07:33:58.000Z
Flutter上的flutter_rust_bridge(FRB)工具可以让我们很方便地在flutter中调用rust代码。然而, FRB默认从源码编译rust库, 有时候flutter开发人员可能不希望安装rust环境, 而是直接使用预编译的二进制库。接下来我将介绍如何在FRB中使用预编译的二进制文件。
首先, FRB官方提供了一种使用预编译二进制文件的方法, 详见precompiled_binaries, 但是只支持把二进制文件放在Github Release里, 编译时还需要提供Github的Token, 非常死板。
我希望可以本地编译,本地使用。
cargokit是FRB提供的用于编译rust代码的工具。这个工具代码是用dart写的, 相对简单易懂, 我通过读这个工具的源码来了解应该如何设置它来让它使用预编译二进制文件来构建flutter app。
这一小节的内容和precompiled_binaries的前半部分是一样的。
首先需要在应用的项目的根目录的cargokit_options.yaml文件(没有就自己创建)中添加选项
use_precompiled_binaries: true
这个选项告诉cargokit我这个app项目希望使用预编译的二进制库文件。
但这还不够, 还得声明这个FRB项目本身支持预编译。
这也简单, 在FRB项目的rust文件夹中添加一个cargokit.yaml文件, 内容如下:
precompiled_binaries:
url_prefix: <url_prefix>
public_key: <pubkey>
其中url是cargokit下载预编译二进制库的前缀, publib_key是用来验证二进制文件的。
修改rust的src目录中的文件, 以及修改build.rs、Cargo.toml、Cargo.lock、cargokit.yaml这几个文件都会导致cargokit算出不同的哈希值, 认为rust目录有修改。
cargokit目前只提供了一个precompile-binaries命令, 它强制要求提供一个GTIHUB_TOKEN来上传编译好的库文件到Github仓库的release页面。我不希望上传到Github, 所以我需要修改cargokit的源码来支持本地编译。
这不难, 只需要复制cargokit/build_tool/lib/src/precompile_binaries.dart为precompile_local_binaries.dart, 然后删除与github相关的代码, 加一个output_dir参数来指定输出目录。把库文件复制到输出目录, 把签名文件也写入到输出目录即可。
此外, 还需要注意为macosx平台编译需要设置MACOSX_DEPLOYMENT_TARGET环境变量为flutter app中macos目录下Podfile中指定的最低版本。例如, 如果Podfile中指定最低版本为10.15, 则需要设置MACOSX_DEPLOYMENT_TARGET为10.15。否则macosx打包时会发出警告。