美文网首页iOS-Android-私房菜iosFlutter学习
手把手教你编译Flutter engine

手把手教你编译Flutter engine

作者: 共田君 | 来源:发表于2018-12-27 18:10 被阅读4142次
    一图说明

    欢迎关注姊妹篇《手把手教你解决flutter engine内存泄漏》

    flutter已经到了1.0了,小伙伴还没有使用的赶紧试试吧,如果想更深入的把玩,可以尝试编译一下官方的flutter engine,地址在 https://github.com/flutter/engine

    为什么要编译engine

    1. 学习
    2. 改造
      第二篇会介绍怎么样改造engine来解决内存泄漏问题,满足自己业务需求。

    事前准备

    • 机器,linux,mac,或windows
    • git 命令
    • IDE , android stuido或xcode
    • ssh客户端,用户github身份验证
    • python
    • gclient

    如何编

    1. 下载

    $ vim .gclient
    

    内容为

    solutions = [
      {
        "managed": False,
        "name": "src/flutter",
        "url": "git@github.com:<your_name_here>/engine.git",
        "custom_deps": {},
        "deps_file": "DEPS",
        "safesync_url": "",
      },
    ]
    
    • 1.5 切换到engine目录
    $ cd engine
    
    • 1.6 获取Flutter所依赖的所有源代码,时间超长,大概一个半小时
    $ gclient sync
    
    • 1.7 进入src/flutter目录,拉取操作
    $ cd src/flutter
    $ git pull upstream master
    

    后面的操作不要看官方的了,最好的文档已经江湖失传了,仅此一篇

    2 回滚

    • 2.1 找到当前flutter对应的engine版本
      类似
    $  cat /Users/boo/Documents/flutter/bin/internal/engine.version 
    

    如1.0版的engine版本号,这是一个commit号

    7375a0f414bde4bc941e623482221db2fc8c4ab5
    
    • 2.2 回滚当时提交版本
      执行命令
    bogon:src boo$ git reset --hard af454a046be29cc4b8a3f810a925ac60dd27f84f 
    HEAD is now at af454a0 Fix dart/create_updated_flutter_deps script so it actually updates flutter/DEPS. (#175)
    
    

    只同步指定commit版本命令

    gclient sync --with_branch_heads --with_tags  
    

    3. 创建engine工程

    编译选项具体可以参考 https://github.com/Natoto/flutterOnExistApp/wiki/%E5%B8%B8%E7%94%A8%E7%BC%96%E8%AF%91%E5%91%BD%E4%BB%A4

    以ios为例

    生成ios设备用的未经编译的工程

    $ ./flutter/tools/gn --ios --unoptimized
    

    生成ios设备用的工程,不带符号表

    ./flutter/tools/gn --ios
    

    生成release工程

    $ ./flutter/tools/gn --ios --runtime-mode=release
    

    生成模拟器版本工程

    ./flutter/tools/gn --ios --simulator 
    

    生成模拟器用的未优化版本

    ./flutter/tools/gn --ios --simulator --unoptimized  
    

    也可以可以指定cpu

    ./flutter/tools/gn --runtime-mode=release --ios --ios-cpu=arm64
    

    4. 编译

    一种编译模式三千多个文件,大概一个半小时

    编译relase工程

    $ ninja -C out/ios_release
    

    编译设备用debug模式

     ninja -C out/ios_debug && ninja -C out/host_debug
    

    编译设备用debug模式,带符号

     ninja -C out/ios_debug_unopt && ninja -C out/host_debug_unopt
    

    编译模拟器用debug模式

     ninja -C out/ios_debug_sim_unopt && ninja -C out/host_debug_unopt
    

    如何用

    经过漫长的编译之后,终于可以看到产物了,flutter.framework
    就是对应模式的产物
    有两种使用方法,一边开发一边测试,或无需修改,直接使用

    1. 在工程中使用
    flutter run --local-engine-src-path /Users/boo/Documents/engine/src --local-engine=ios_debug_unopt
    
    1. 直接拷贝替换掉flutter目录里面的engine就可以立即使用了
      /Users/boo/Documents/flutter/bin/cache/artifacts/engine

    相关文章

      网友评论

        本文标题:手把手教你编译Flutter engine

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