Android Weekly #504
https://androidweekly.net/issues/issue-504
All about Proto DataStore
DataStore proto类型的一篇介绍.
High performance with idiomatic Kotlin
一些提示性能的kotlin写法的介绍.
Unpacking Android Security: Part 1 — Improper Platform Usage
Android安全系列文章, 这篇主要是关于exported属性.
逆向工具:
Oh Snap! Snapshot Testing with Jetpack Compose
Compose的snapshot测试.
iOS用的是这个: https://github.com/pointfreeco/swift-snapshot-testing
Android用的是这个: https://github.com/pedrovgs/Shot
文章里讲了CI配置的部分, 是Bitrise, 还有截图.
对于不同emulator的差异性, 设置了容忍度.
为了更高效, 还在IDE里设置了live template.
Accessing App Usage History In Android
关于获取用户设备上其他应用的使用情况, 有些api已经deprecated了.
比较官方的方法是使用: UsageStatsManager
需要向用户申请权限.
Combining flows: merge, zip, and combine
flow组合的各种操作符:
- merge: 两个flow合成一个flow. flow之间的元素没有等待关系; 最终flow的个数为两个flow个数的总和.
- zip: 从两个flow中各取一个元素组成pair, 构成新flow的元素, 所以元素之间有等待关系. 当源头flow中有一个结束时, 结果flow结束, 不成对的元素会被丢弃. (类比: 双人舞的pair).
- combine: 和zip一样, 也是利用元素组成pair, 所以也会等待. 但是与zip的一对一不同的是, 每个flow最新的元素都会被作为下一个候选人, 也就是说如果新的元素没有出现, 那么老的元素会被用于和另一个flow的新元素配对. 所以combine会等到所有flow都没有元素时结束.
How to generate Kotlin DSL Client from GraphQL schema
一个插件: https://github.com/ermadmi78/kobby
Using Google Maps in a Jetpack Compose app
Google maps:
https://github.com/googlemaps/android-maps-compose
Compiler Warnings Are Good, Actually
应该关注一下编译错误和警告.
Code
- https://github.com/ermadmi78/kobby
- https://github.com/skydoves/Lazybones
- https://github.com/googlemaps/android-maps-compose