flutter sdk修改与编译 engine

flutter 的 sdk基本的划分,engine中包含了第三方库,用于底层交互,framework封装了自己的一套render和gesture等

那么这些都是如何编译进apk中呢?

基本了解之后,构建engine开发环境

一、拉取环境

1、fork一个到自己的仓库中

flutter/engine地址

2、下载depot_tools源码库 并加入环境变量中

用于gclient sync同步flutter的 engine

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

3、创建一个engine代码放置的文件夹engine ,文件夹中创建一个文件vim .gclient

内容如下

solutions = [
  {
    "managed": False,
    "name": "src/flutter",
    "url": "git@github.com:zhuang12346413/engine.git",//替换自己的名字
    "custom_deps": {},
    "deps_file": "DEPS",
    "safesync_url": "",
  },
]

4、同步代码

gclient sync --verbose 

#设置--verbose可以看到下载的过程,方便下载过程中出现问题看到异常信息

gclient sync卡住问题
curl https://www.google.com是否有返回值,若无返回值说明当前网络还是存在问题的,可以尝试重启机器等多种操作

同步到100%会卡住,不要关闭 它还在下文件,网络中可以看到:ubuntu可以通过 sudo nethogs 命令看到

5、git pull upstream master在src/flutter更新

6、切换到与FlutterSDK对应的版本

方法如下:找到${flutterSDK_PATH} /flutter/bin/cache/flutter_sdk.stamp

cat flutter_sdk.stamp //得到flutter版本的commit信息

然后在engine中在src/flutter目录

git reset --hard ${commitid} //commitid替换成前面cat得到的

然后同步一下代码,gclient sync

二、编译

编译是通过flutter/tools/gn ${argument} 构建ninja 编译环境,然后通过ninja编译

1、编译android版本如下

通过命令行构建本地engine						
./flutter/tools/gn --android --unoptimized		用于设备端可执行文件。				每一种特定生成一个 out/${cpu} 的文件夹
./flutter/tools/gn --android --unoptimized --android-cpu=arm64		适用于较新的64位Android设备。				不指定release 则生成debug版本
./flutter/tools/gn --android --android-cpu x86 --unoptimized		适用于x86模拟器。				
./flutter/tools/gn --android --android-cpu x64 --unoptimized		适用于x64模拟器。				
./flutter/tools/gn --unoptimized		 对于主机端可执行文件,需要编译代码				
编译						
ninja -C out/android_debug_unopt 用于设备端可执行文件。						
ninja -C out/android_debug_unopt_arm64 适用于较新的64位Android设备。						
ninja -C out/android_debug_unopt_x86 适用于x86模拟器。						
ninja -C out/android_debug_unopt_x64 适用于x64模拟器。						
ninja -C out/host_debug_unopt 用于主机端可执行文件。						
这些命令可以组合。例如:ninja -C out/android_debug_unopt && ninja -C out/host_debug_unopt						

2、本地engine加入工程

pubspec.yaml文件添加内容如下:

dependency_overrides:
  sky_engine:
    path: /home/luzz/FlutterSDK/engine/src/out/android_debug_unopt_arm64/gen/dart-pkg/sky_engine
  sky_services:
    path: /home/luzz/FlutterSDK/engine/src/out/android_debug_unopt_arm64/gen/dart-pkg/sky_services

3、打包进apk

调试

flutter run  --local-engine-src-path PATHXXXXX  --local-engine=XXXX

例:flutter run --local-engine-src-path /home/luzz/FlutterSDK/engine/src --local-engine=android_debug_unopt_arm64

编译apk

flutter build apk --release --local-engine-src-path /Users/limeihong/Desktop/engine/src --local-engine=android_release

flutter build apk --debug --local-engine-src-path /Users/limeihong/Desktop/engine/src --local-engine=android_debug

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值