在Flutter官方只提供了4中CPU架构的so库,armeabi-v7a、arm64-v8a、x86和x86-64,其中x86系列只支持Debug模式,没有提供armeabi架构的库,在目前多数app使用的大量sdk都只提供了armeabi架构的库,因此开发者想到的一种方案是对engine进行修改构建。
准备工作:
操作系统,IDE,git等这些就不说了,重点安装下depot_tools(git的扩展)
以mac为例:
下载
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
配置depot_tools环境变量
$ export PATH=$PATH:/你的下载目录/depot_tools
获取源码和配置环境
1 新建文件目录,建议命名engine,在engine目录下创建 .gclient文件,如下配置编辑到.gclient里
其中<your_name_here> 用你的 GitHub账号名称
2 cd engine
3 gclient sync (这个命令获取flutter依赖的源码,它会自动运行git clone和其他命令)
4 cd src/flutter(其中src/flutter文件是通过gclient syn命令生成的)
5 git remote add upstream git@github.com:flutter/engine.git
6 cd ..
7 brew install ant
构建和运行代码
Android (cross-compiling交叉编译)
以下命名没有特别说明 当前目录是src
1 git pull upstream master ( 进入src/flutter更新flutter engine)
2 gclinet sync
3 准备构建文件
./flutter/tools/gn --android --unoptimized (为device-side executables)
./flutter/tools/gn --android --android-cpu x86 --unoptimized (为 x86模拟器)
./flutter/tools/gn --android --android-cpu x64 --unoptimized ( 为x64 模拟器)
./flutter/tools/gn --unoptimized (为host-side executables)
4 构建可执行文件
ninja -C out/android_debug_unopt (为device-side executables)
ninja -C out/android_debug_unopt_x86(为 x86模拟器)
ninja -C out/android_debug_unopt_x64 ( 为x64 模拟器)
ninja -C out/host_debug_unopt (为host-side executables)
这些命令可以组合,比如 ninja -C out/android_debug_unopt && ninja -C out/host_debug_unopt
编译完成后可以在 out/android_debug_unopt 一系列目录下找到 flutter.jar文件
修改源码构建支持arm架构参考 https://github.com/flutter/engine/wiki/Android-Builds-Supporting-armeabi
官方文章:https://github.com/flutter/engine/blob/master/CONTRIBUTING.md