欢迎关注姊妹篇《手把手教你解决flutter engine内存泄漏》html
flutter已经到了1.7 了,小伙伴尚未使用的赶忙试试吧,若是想更深刻的把玩,能够尝试编译一下官方的flutter engine,地址在 github.com/flutter/eng…python
217429001
depot_tools
9.4 下载地址 developer.apple.com/download/mo…linux
Can't build Flutter engine with Xcode 10 because it removed i386 support - but that's required at this point. I believe there's another issue open for this but I can't find it, @cbracken knows more.android
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH=$PATH:/path/to/depot_tools
复制代码
gclone xxx
, xxx为你本身fork后的engine地址,为了后面方便.gclient
文件 ,执行$ vim .gclient
复制代码
内容为ios
solutions = [
{
"managed": False,
"name": "src/flutter",
"url": "git@github.com:<your_name_here>/engine.git",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
},
]
复制代码
$ cd engine
复制代码
$ gclient sync
复制代码
flutter engine 群友反馈:git
解决方案: 出现以上错误的缘由是由于python的版本问题,在python2.6(含2.6)如下版本中,在访问HTTPS的网站时,TLS握手期间不会检查服务器X509的证书签名是不是CA的可信任根证书。这种局面在python2.7 3.4 和 3.5版本中获得了修改。参考 www.jianshu.com/p/d3b60e42f…github
export http_proxy=http://127.0.0.1:1087;
export https_proxy=http://127.0.0.1:1087;
复制代码
再次 gclient sycchrome
解决方案: 同上shell
参考于 stackoverflow.com/questions/2…数据库
$ cd src/flutter
$ git remote add upstream git@github.com:flutter/engine.git
$ git pull upstream master
复制代码
后面的操做不要看官方的了,最好的文档已经江湖失传了,仅此一篇
$ cat /Users/boob/Documents/flutter/bin/internal/engine.version
复制代码
如1.5.4 hot fix版的engine版本号,这是一个commit号
52c7a1e849a170be4b2b2fe34142ca2c0a6fea1f
复制代码
v1.7.8+hotfix.3 版engine版本号是
54ad777fd29b031b87c7a68a6637fb48c0932862
复制代码
bogon:src boo$ git reset --hard 52c7a1e849a170be4b2b2fe34142ca2c0a6fea1f
HEAD is now at 52c7a1 Fix dart/create_updated_flutter_deps script so it actually updates flutter/DEPS. (#175)
复制代码
查看当前版本号
$ git rev-parse HEAD
复制代码
只同步指定commit版本命令
gclient sync --with_branch_heads --with_tags
复制代码
编译选项具体能够参考 github.com/Natoto/flut…
以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
复制代码
一种编译模式三千多个文件,大概一个半小时
编译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 就是对应模式的产物 有两种使用方法,一边开发一边测试,或无需修改,直接使用
flutter run --local-engine-src-path /Users/boo/Documents/engine/src --local-engine=ios_debug_unopt
复制代码
直接拷贝替换掉flutter目录里面的engine就能够当即使用了 /Users/boo/Documents/flutter/bin/cache/artifacts/engine
一行代码教你解决FlutterPlatformViews内存泄露 by AShawn
手把手教你在Flutter项目优雅的使用ORM数据库 by williamwen1986
flutter通用基础库flutter_luakit_plugin by williamwen1986
github - flutter_luakit_plugin使用例子 by williamwen1986
手把手教你解决 Flutter engine 内存泄漏 by 共田君
github - 编译产物下载 修复内存泄漏后的flutter engine(可直接使用)by 共田君
github demo - 修复内存泄漏后的flutter engine by 共田君
持续更新中...