Gityuan

Keep on going never give up

[置顶]Android 操作系统架构开篇

基于Android 6.0或更高版本的源码,专注于分享Android系统原理、架构分析的原创文章,这是Android系列文章的开篇。

[置顶]Flutter 跨平台演进及架构开篇

基于Flutter 1.5.4或更高版本的源码,专注于分享Flutter引擎、框架、虚拟机等架构与原理解读的原创文章。

字节跳动为什么选用Flutter:并非跨平台终极之选,但它可能是不一样的未来

2018 年 12 月 ,Google 宣布 Flutter 1.0 版本正式发布。截至目前, Flutter 在 Github 上已获得 88000+ 的关注和 11000+ 的 Fork ,其发展速度相当惊人,是今年移动端最火热的开发框架之一。 Flutter 大火背后的原因是什么?为什么越来越多的企业和开发者会选择使用 Flutter?Flutter 会成为跨平台开发的终极...

彻底掌握Timeline原理(一)

一、概述 1.1 Timeline事件总览 C++引擎层层采用的是采用的是Embedder Stream; Dart应用层采用的是Dart Stream; DartVM采用的API Stream; 1.2 C++层Timeline用法 1.2.1 C++同步事件 #include "flutter/fml/trace_event.h" #define TRACE...

ServiceIsolate工作原理

一、概述 在前面文章深入理解Dart虚拟机启动中,有讲到Dart虚拟机中有一个比较重要的isolate,创建的isolate名为”vm-service”,运行在独立的线程,也就是ServiceIsolate,这是用于系统调试相关功能的一个isolate,提供虚拟机相关服务, 比如hot reload,timeline等。这里先来看看ServiceIsolate的启动过程以及监听处理流程。...

Dart虚拟机运行原理

一、Dart虚拟机 1.1 引言 Dart VM是一种虚拟机,为高级编程语言Dart提供执行环境,但这并意味着Dart在D虚拟机上执行时,总是采用解释执行或者JIT编译。 例如还可以使用Dart虚拟机的AOT管道将Dart代码编译为机器代码,然后运行在Dart虚拟机的精简版环境,称之为预编译运行时(precompiled runtime)环境,该环境不包含任何编译器组件,且无法动态加载Da...

解读Dart虚拟机的参数列表

一、概述 在third_party/dart/runtime/vm/flag_list.h定义了Dart虚拟机中所有标志的列表,标志分为以下几大类别: Product标记:可以在任何部署模式中设置,包括Product模式 Release标志:通常可用的标志,除Product模式以外 Precompile标志:通常可用的标志,除Product模式或已预编译的运行时以外 De...

Flutter机器码生成gen_snapshot

一、概述 书接上文源码解读Flutter run机制的第四节 flutter build aot命令将dart源码编译成AOT产物,其主要工作为前端编译器frontend_server和机器码生成,本文再来介绍机器码生成的工作原理。 1.1 GenSnapshot命令 GenSnapshot.run具体命令根据前面的封装,针对Android和iOS平台各有不同: 1.1.1 针对And...

Flutter前端编译frontend_server

一、概述 书接上文源码解读Flutter run机制的第四节 flutter build aot命令将dart源码编译成AOT产物,其主要工作为前端编译器frontend_server和机器码生成,本文先介绍前端编译器frontend_server的工作原理。 1.1 frontend_server命令 KernelCompiler.compile()过程等价于如下命令: // 该fr...

源码解读Flutter run机制

一、解读flutter run命令 1.1 初识flutter run 1.1.1 IDE运行 编写完flutter代码后,一定离不开运行flutter应用。比如Android Studio可点击如下按钮来执行 该命令默认是采用debug模式,如果需要运行release模式,可以在IDE选择中的Run->Configurations的Additional arguments里...

源码解读Flutter tools机制

一、Flutter tools命令 1.1 概述 开发Flutter应用过程,经常会用过Flutter命令,比如flutter run可用于安装并运行Flutter应用,flutter build可用于构建产物,相信有不少人会好奇flutter命令背后的原理。 对于flutter命令的起点位于flutter sdk中路径/flutter/bin/目录中的flutter命令,该命令最终会调用...

深入理解Flutter的Platform Channel机制

基于Flutter 1.5,从源码视角来深入剖析flutter的channel,相关源码目录见文末附录 一、概述 Flutter 官方提供了一种 Platform Channel 的方案,用于 Dart 和平台之间相互通信。 核心原理: Flutter应用通过Platform Channel将传递的数据编码成消息的形式,跨线程发送到该应用所在的宿主(Android或iO...

搭建Flutter Framework开发环境

一、相关依赖 Linux,Mac OS X或者Windows git:用于源码的版本控制; ssh client:用于Github的认证; IDE: 带有Flutter插件的Android Studio,这是官方推荐的旗舰IDE; Python: 很多工具都需要用到Python,比如gclient; Android platform tools:可使用如下命令来安...

搭建Flutter Engine源码编译环境

一、准备环境 1.1 准备 OS:MacOS同时支持Android和iOS的交叉编译功能,Linux只支持Android产物的交叉编译; git:用于源码的版本控制; ssh client:用于Github的认证; IDE: 带有Flutter插件的Android Studio,这是官方推荐的旗舰IDE; depot_tools:内含gclient命令; Pyt...

深入理解Flutter的Isolate创建过程

基于Flutter 1.5,从源码视角来深入剖析flutter的isolate机制,相关源码目录见文末附录 一、概述 Root isolate负责UI渲染以及用户交互操作,需要及时响应,当存在耗时操作,则必须创建新的isolate,否则UI渲染会被阻塞。 创建isolate的方法便是Isolate.spawn(),本文将从源码角度来讲解该方法的核心工作机制。 1.1 Isola...

深入理解Flutter异步Future机制

基于Flutter 1.5,从源码视角来深入剖析flutter的Future处理机制,相关源码目录见文末附录 一、概述 Flutter框架层采用dart语言,在Dart中随处可见的异步代码,有大量的库函数返回的是Futrue对象,dart本身是单线程执行模型,dart应用在其主isolate执行应用的main()方法时开始运行,当main()执行完成后,主isolate所在线程再...

深入理解Flutter消息机制

基于Flutter 1.5,从源码视角来深入剖析flutter消息处理机制,相关源码目录见文末附录 一、概述 在深入理解Flutter引擎启动 已经介绍了引擎启动阶段会创建AndroidShellHolder对象,在该过程会执行ThreadHost初始化,MessageLoop便是在这个阶段启动的。 1.1 消息流程图 MessageLoop启动流程图 该过程主要工作:...