Maxiee Weekly No.2
博客文章
- 《Skia-python:Skia 的 Python 封装》
- Skia 是一个著名的 2D 高性能图形绘制库,是 Google 公司在多年前收购来的一个项目,目前被广泛用于 Google 的大型开源项目中。比如 Chrome、Android、Flutter,它们的底层都采用 Skia 进行绘制。
- skia-python 是对 skia 库的一个 Python 语言封装。由于 Python 语言安装依赖和开发都比较简单,因此非常适合于学习 Skia。
- 《MongoDB Atlas 云服务》
- MongoDB Atlas 是 MongoDB 自家的云服务。目前各大云服务厂商都提供 MongoDB 云服务。为什么选择 Atlas 呢?原因是它对初学者提供免费实例,适合个人学习或者是做一些小项目时使用。
文章
- 《Deferred Components-实现Flutter运行时动态下发Dart代码》
- Flutter 2.2 推出 Deferred Components 功能
- Dart 库、资源动态下发
- 只支持 Android,App Bundle
- 基于 Dart2.13 的 Split AOT 编译能力
- 拆分 libapp.so
- libapp.so 包含了所有业务代码
- 对 libapp.so 进行拆分
- Google 生态
- 依赖 Google Play 生态
- 针对中国开发者有不依赖 Google Play 的方案,缺乏文档
- Deferred-Components Dart 加载逻辑
- Dart 异步加载
- 底层 Android PlayStoreDynamicFeatureManager
- 加载完成后将结果返回 Dart 侧
- loadDartLibrary
- 找到 so 的位置
- 调用 FlutterJNI dlopen 命令打开so文件
- 基于 Deferred Components 的动态化方案
- 基于 Flutter Deferred Components 打出拆分 so
- so 放在数据目录(SD 卡/网络下发)
- 继承 DeferredComponentManager,替换 PlayStoreDynamicFeatureManager
- Flutter 2.2 推出 Deferred Components 功能
- 《Kubernetes vs Docker Compose: What's the difference?》
- Kubernetes 和 Docker Compose 都是容器编排框架
- Kubernetes 在多台机器上运行容器,Docker Compose 在单台机器上运行容器
- 《什么是云原生?这回终于有人讲明白了》
- 一种构建和运行应用程序的方法
- Cloud:应用程序位于云中
- Native:程序为云而设计,充分利用弹性、分布式
- 2013年Pivotal的Matt Stine首次提出
- 《迁移到云原生架构》
- Matt Stine总结特征:
- Version1:12因素、微服务、自敏捷、基于 API 协作、扛脆弱性
- Version2:模块化、可观察、可部署、可测试、可替换、可处理
- Version3:DevOps、持续交付、微服务、容器
- 云原生架构:
- k8s + Docker 容器化
- 基于微服务(灵活性、可维护性)
- 持续迭代、运维自动化
- 弹性伸缩,动态调度
- 微服务:理论基础是康威定律
- DevOps:开发和运维合体,还包括测试
- 《skia-python》
- Skia 是 Chrome/Android/Flutter 背后的高性能 2D 图像绘制库
- Skia 是前端的财富密码,成功的前端项目都与它有关
- skia-python 是 skia 的 Python 封装,非常适合入门学习 Skia
- 该项目的挖掘价值:
- Skia 功能、API,通过 Python 语言简单容易
- 如何编译 Skia 代码
- 如何用一种语言封装 Skia
- 《Flutter 热更新功能实现》
- Android 单端热更新
- Flutter 构建产物
- jni 下 libflutter.so:Flutter 引擎,Skia、Dart 都在其中
- libs 下 flutter.jar:Embedder Java 侧实现
- assets
- flutter_assets:图片、字体资源
- 代码快照
- isolate_snapshot_data
- isolate_snapshot_instr
- vm_snapshot_data
- vm_snapshot_instr
- Android 侧 Flutter 初始化源码
- FlutterMain 入口
- initConfig 指定快照名称
- initResources 通过 ResourceExtractor 访问 asset
- 访问地址是 Hook 点
- 热更新远离
- 源码热更新
- 远程下载快照
- 拷贝到 Hook 点地址(替换已有)
- 引擎执行时从新快照执行
- 资源热更新
- asset 目录没法替换
- 使用 Image.file 从制定外部目录加载
- 源码热更新
- 《FLUTTER FRAMEWORK: HOW DOES IT WORK?》
- 2017年5月首次发布,更像游戏引擎
- 应用由 Widget 组成,被渲染到 Skia Canvas,平台对 Canvas 进行渲染
- AOT 编译,应用原生速度运行
- Platform 层
- Flutter 包含 Shell,用于在不同平台上提供 DartVM
- Shell 平台相关,提供原生平台 API,创建平台相关 Canvas
- 支持平台:Android、iOS、Windows、Linux……
- 如果你想把 Flutter 作为库使用,使用 platform/embedder
- Flutter 引擎层:
- 提供 Dart 运行时、Skia、Platform Channel 等等
- 建立在 Platform 层之上
- Flutter Framework 层
- 最上层,开发框架
- UI 最终被绘制成 Skia Canvas
主题项目
skia-python-demos:demos for skia-python