Android Weekly Notes #504

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

Video

推荐阅读更多精彩内容