如果我们需要对比Flutter与Native的性能数据,那么我们就需要获取Flutter的一部分性能数据,FPS就是其中的一个衡量标准。
Flutter Engine 产物归档与符号表备份
自定义引擎编译完成后,我们需要将产物进行归档以备使用,同时为了定位到crash时发生的堆栈信息,我们需要将符号表进行备份,本文基于macOS环境下的v1.9.1产物,最新版的v1.12.13版本产物有所变化,有兴趣自行查看。Flutter官方提供的方式是基于Docker的方式,可以参考 flutter/engine/ci但是并没有提供Docker之外的工具用于产物归档和符号表备份。
Flutter iOS 编译参数 -Oz 是负优化吗
2019年11月23日,字节跳动团队在其Flutter沙龙上有一个专题,如何缩减接近 50% 的 Flutter 包体积,具体内容可以点击链接进行查看,其中有一点提到了优化 Engine 编译产物,通过修改编译参数-Os为-Oz达到缩减包大小的目的。
Flutter Engine C++ 源码调试初探
禁止转载,原文出处 https://fucknmb.com
在Flutter Engine的自定义过程中,难免会对其进行调试,所谓工欲善其事必先利其器。调试的手段有多种,一般以日志输出和断点调试为主。本篇文章主要介绍一下Android环境下使用LLDB对Flutter Engine C++部分源码进行调试,至于为什么不使用GDB,因为我没有用GDB成功过,环境搭建的过程中遇到的坑很多,需要耐心看完全文。此处为人肉防盗文, 原文出处 https://fucknmb.com
获取并还原 Flutter Engine Crash 堆栈
对于Flutter来说,大部分crash其实发生在flutter engine中,即libflutter.so中,也就是native crash,对于这部分异常的堆栈,我们要如何进行还原呢。
治治这个 google 一年没修的 agp transform bug
随着android gradle plugin(以下简称agp)版本的迭代,被google带进来的bug也越来越多。目前整体来看,agp 3.1.4是比较稳定的一个版本,其之后的版本多多少少都有点问题(如 agp3.2.0-3.5.0的版本R8,multidex都有问题等等),这篇文章主要介绍一下一个在2018年5月份被google带进来的bug以及如何修复它。该bug从agp 3.2.0开始存在,直到目前为止 agp 3.5.0 中依旧未修复该问题。该问题会直接影响编译速度,原本能够构建成功的一次增量构建,因为该问题,必须clean后再进行全量构建,浪费编译时间,进而降低开发效率。
这篇文章比较绕,可能会把你绕晕,如果把你绕晕了,你可以直接拉到最后面看开箱即用的解决方法。
R8 踩坑记
Android Q BaseDexClassLoader 变动
上一篇文章讲到一个有意思的地方,见 谈谈Android P行为变更与内联优化 文章说到,在Andorid Q上加载org.apache.http.legacy.boot.jar和Android P有点不同,Android P上是插入到App的PathClassLoader的pathList中的dexElements完成加载的,而Android Q上加载org.apache.http.legacy.boot.jar的却是一个独立的PathClassLoader对象,但是和App的PathClassLoader属于不同的ClassLoader实例,奇怪的是其父类都是BootClassLoader,根据双亲委托机制,这个类查找显得有点逆天,所以扒了下Android Q的源码,发现是BaseDexClassLoader里做了一点改动。
谈谈 Android P 行为变更与内联优化
最近遇到了几个问题,与Android P行为变更与内联优化相关,并且基本都是在OnePlus 5/5T/6/6T H2O 9.0.1上可复现。