美文网首页
flutter engine编译,方便阅读源码

flutter engine编译,方便阅读源码

作者: laomao_老毛 | 来源:发表于2021-05-10 11:03 被阅读0次

    获取Depot_tools脚本工具集

    depot_tools是google用来管理Chromium源码的工具集,主要有gclient、ninja、repo等。gclient和repo都是用来检出项目源码的脚本。gclient主要依赖于.gclient与DEPS2个配置违建进行源码的依赖检出。而repo主要依赖于manifest.xml配置文件进行项目模块源码检出。

    获取工具集

    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
    

    上面下载的时候会报443,是因为我们下载的是外网项目,可以给Git配置代理:

    git config --global http.proxy 'http://127.0.0.1:1087'
    
    git config --global https.proxy 'socks://127.0.0.1:1080'
    

    这里可以看一下自己的代理软件,是不是对应的端口。

    clone成功之后配置一下环境变量,就可以使用命令了

    export PATH=$PATH:/path/depot_tools
    

    检出Flutter Engine源码

    这里由于github下载较慢,使用gitee进行下载的。

    git clone https://gitee.com/lao_mao_the_only_one/flutter-engine.git
    

    获取Flutter Engine依赖的源码

    在上面clone下来的项目中新建一个.gclient文件

    solutions = [
      {
        "managed": False,
        "name": "src/flutter",
        "url": "https://gitee.com/lao_mao_the_only_one/flutter-engine.git",
        "custom_deps": {},
        "deps_file": "DEPS",
        "safesync_url": "",
      },
    ]
    

    上面的url改成自己Fork的Flutter Engine的地址

    之后,在engine目录下进行gclient sync

    cd flutter_engine
    gclient sync
    

    上面由于要访问外网,可能会失败,需要配置代理,上面只是配置了git的代理,这里可以给终端配置一下代理:

    export http_proxy=http://127.0.0.1:1087
    export https_proxy=socks://127.0.0.1:1080
    

    可以通过如下验证配置是否成功:

    curl -I www.google.com
    

    如果打印出网页信息,说明成功。

    注意:export可以在bash中配置,这样是全局有效,也可以在命令行中配置,只是在当前命令窗口中有效。

    切分支

    在我们使用的Flutter SDK中找到该版本对应的commit id

    bin/internal/engine.version // 在该目录下可以看到
    

    切换到engine/src/flutter目录下,执行:

    git reset --hard 2f0af3715217a0c2ada72c717d4ed9178d68f6ed
    gclient sync --with_branch_heads --with_tags
    

    我使用的Flutter SDK是1.22.6版本,在执行上面命令后会报错:

    failed to resolve flutter_internal/android/sdk/licenses@latest (line 28): prefix "flutter_internal/android/sdk/licenses" doesn't exist or not visible to unauthenticated callers
    

    这是因为你没有权限,只有谷歌的开发者才能直接构建,在github是有该issues,暂未解决:

    https://github.com/flutter/flutter/issues/72108
    

    之后我使用了v1.12.13-hotfixes版本没问题了,该版本对应的commit_id:

    af51afceb8886cc11e25047523c4e0c7e1f5d408
    

    编译Engine

    准备构建文件

    cd src  //进入src目录
    ./flutter/tools/gn --runtime-mode profile //生成Host编译产物存放文件
    ./flutter/tools/gn --android --runtime-mode profile //生成Android编译产物存放文件
    

    执行上面命令会在src/out目录下生成相应的文件夹,用于存放该平台的编译产物

    构建可执行文件

    ninja -C out/host_profile -j 6
    ninja -C out/android_profile -j 6
    

    使用本地引擎运行Flutter应用

    flutter run --local-engine-src-path <FLUTTER_ENGINE_ROOT>/engine/src --local-engine=android_profile
    

    IDE配置

    个人编译flutter engine主要为了方便阅读源码,所以上面几步只是做了简单记录,在我们使用了./flutter/tools/gn编译引擎后,就会在src/out下生成compile_commands.json 文件

    • 将compile_commands.json文件拷贝到src/flutter目录下
    • 使用Clion打开src/flutter目录,就可以识别到compile_commands.json,代码就有跳转的能力了。

    参考文档

    相关文章

      网友评论

          本文标题:flutter engine编译,方便阅读源码

          本文链接:https://www.haomeiwen.com/subject/wtzbdltx.html