开源项目paparazzi原理分析

867 阅读1分钟

一. 介绍

cashapp/paparazzi 是著名开源库okhttp的维护者的另一个开源项目, 网上的文档非常少,这里做一些自己研究的记录,纯一手干货

二. 用途

官方文档只有简短的介绍

An Android library to render your application screens without a physical device or emulator.

让你的Android库不渲染在物理机或者模拟器,那到底渲染在哪呢? 答案是图片和视频,然后打包的html中。这样就可以在不编译成apk的情况下生成预览的图形甚至动态的视频。听起来是不是跟AndroidStudio的预览有点像? 对了,这个项目就是用了AOSP中的中的layoutlib,跟AndroidStudio是一个原理

三. 使用方式

项目提供了一个api库(paparazzi) 和一个gradle 插件库(paparazzi-gradle-plugin)

第一次clone项目下来是运行不了的,文档里面没有任何提示, 需要先将paparazzi-gradle-plugin上传到本地maven仓库,如果只是使用直接使用上传好的就行了

在sample项目中引入插件apply plugin: 'app.cash.paparazzi' 这时候会多出两个gradle任务, 执行

./gradlew sample:preparePaparazziDebugResources

会创建文件/sample/build/intermediates/paparazzi/resources.txt 后面生成预览时会用到这些信息

最后执行test中的单元测试,相应的html页面会自动输出到/sample/build/reports/paparazzi

四. 原理解析

AOSP中的中的layoutlib巧妙的模拟了Android运行过程中的measure、layout、draw等过程,最后将画面绘制到自己的canvas中

五. 存在的问题

  • 部分字体Android sdk中未找到,Unicode字体渲染有问题
  • 自动化程度不高,部分操作需要手动执行

六. 使用场景

开发过程中的效果展示、待发掘