一. 介绍
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字体渲染有问题
- 自动化程度不高,部分操作需要手动执行
六. 使用场景
开发过程中的效果展示、待发掘