android - 如何将 Flutter 应用程序的构建过程与 Rust 代码集成?即在构建 Flutter 代码时,如何自动构建其 Rust 代码?

标签 android ios flutter dart rust

我有一个 Flutter 应用程序,它也有一些 Rust 代码,它们通过 flutter_rust_bridge 进行通信.已经有一些教程在讨论如何构建这样一个应用程序。但是,他们要求我分别手动触发 cargo build(或类似命令)和 flutter run。你知道,这非常麻烦,如果我忘记执行 cargo,或者该命令失败,我将冒着使用旧二进制文件构建 Flutter 应用程序的风险。因此,我想知道如何使该过程自动化。谢谢!

最佳答案

安卓

将以下内容添加到您的 build.gradle

[
        new Tuple2('Debug', 'debug'),
        new Tuple2('Profile', 'release'),
        new Tuple2('Release', 'release')
].each {
    def taskPostfix = it.first
    def profileMode = it.second
    tasks.whenTaskAdded { task ->
        if (task.name == "javaPreCompile$taskPostfix") {
            println "hello let ${task.name} dependsOn cargoBuild$taskPostfix"
            task.dependsOn "cargoBuild$taskPostfix"
        }
    }
    tasks.register("cargoBuild$taskPostfix", Exec) {
        println "hello executing doLast for task cargoBuild$taskPostfix"
        commandLine 'sh', '-c', "build-your-rust-code"
    }
}

哪里build-your-rust-code是您用来构建 Rust 代码的命令。 (比如我用faSTLane包起来(当然你也可以用其他的)放在rust文件夹里,所以直接调用cd $projectDir/../rust/fastlane && bundle exec fastlane build_android profile:$profileMode就可以了。)

iOS

方法一

最手动的方式如下。转到 Build Phases , 点击 +按钮并选择 New Run Script Phase .然后输入要运行的脚本以构建 Rust 代码。 (例如,对于我自己,我使用 Shell /bin/sh 并调用一些执行实际命令的 faSTLane 命令。)

enter image description here

方法二

一种更自动化的方法是使用 CocoaPod 文件,它会自动帮助您设置所有内容。例如,我添加:

  s.script_phase = {
      :name => 'Compile Rust',
      :script => your-script-to-compile-it,
      :execution_position => :before_compile,
      :shell_path => '/bin/sh'
   }

(例如,我的脚本是 %q{env -i HOME="$HOME" PROJECT_DIR="$PROJECT_DIR" CONFIGURATION="$CONFIGURATION" /bin/bash -c 'source ~/.bashrc && cd $PROJECT_DIR/../.symlinks/plugins/vision_utils/rust/fastlane && LC_ALL= LANG=en_US.UTF-8 bundle exec fastlane build_ios profile:$CONFIGURATION'} 。请注意,至少在我的情况下,我必须创建一个全新的 shell。否则我的 Rust 中的 opencv 会报错并无法编译。但你可能没有这个如果你的 Rust 代码不包含 C++ 的东西,就会出现问题。)

(问答式的回答是为了帮助和我遇到同样情况的人,尤其是不熟悉Android和iOS的人)

关于android - 如何将 Flutter 应用程序的构建过程与 Rust 代码集成?即在构建 Flutter 代码时,如何自动构建其 Rust 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69515032/

相关文章:

java - 如何将base64字符串图像解码为字节数组并将其作为blob类型存储在数据库中?

ios - 导航推送时隐藏自定义中间按钮 swift 4

通过滑动(运动事件) flutter 多个字母选择

ios - 在自动布局 ScrollView 中,setContentOffset 无法正常工作

flutter - 未按预期从 await 函数返回 Future

image - 用户如何完全自由地裁剪图片

java - BaseAdapter 内存不足错误

android - 如何使不同颜色的列表行的选择突出显示?

java - 如何要求用户在单击 android 中的通知操作时解锁设备?

ios - 解包 GMSPlacesClient 类型的可选值时意外发现 nil