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安全系列文章, 這篇主要是關(guān)于exported屬性.
逆向工具:
Oh Snap! Snapshot Testing with Jetpack Compose
Compose的snapshot測(cè)試.
iOS用的是這個(gè): https://github.com/pointfreeco/swift-snapshot-testing
Android用的是這個(gè): https://github.com/pedrovgs/Shot
文章里講了CI配置的部分, 是Bitrise, 還有截圖.
對(duì)于不同emulator的差異性, 設(shè)置了容忍度.
為了更高效, 還在IDE里設(shè)置了live template.
Accessing App Usage History In Android
關(guān)于獲取用戶設(shè)備上其他應(yīng)用的使用情況, 有些api已經(jīng)deprecated了.
比較官方的方法是使用: UsageStatsManager
需要向用戶申請(qǐng)權(quán)限.
Combining flows: merge, zip, and combine
flow組合的各種操作符:
- merge: 兩個(gè)flow合成一個(gè)flow. flow之間的元素沒(méi)有等待關(guān)系; 最終flow的個(gè)數(shù)為兩個(gè)flow個(gè)數(shù)的總和.
- zip: 從兩個(gè)flow中各取一個(gè)元素組成pair, 構(gòu)成新flow的元素, 所以元素之間有等待關(guān)系. 當(dāng)源頭flow中有一個(gè)結(jié)束時(shí), 結(jié)果flow結(jié)束, 不成對(duì)的元素會(huì)被丟棄. (類比: 雙人舞的pair).
- combine: 和zip一樣, 也是利用元素組成pair, 所以也會(huì)等待. 但是與zip的一對(duì)一不同的是, 每個(gè)flow最新的元素都會(huì)被作為下一個(gè)候選人, 也就是說(shuō)如果新的元素沒(méi)有出現(xiàn), 那么老的元素會(huì)被用于和另一個(gè)flow的新元素配對(duì). 所以combine會(huì)等到所有flow都沒(méi)有元素時(shí)結(jié)束.
How to generate Kotlin DSL Client from GraphQL schema
一個(gè)插件: 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
應(yīng)該關(guān)注一下編譯錯(cuò)誤和警告.
Code
- https://github.com/ermadmi78/kobby
- https://github.com/skydoves/Lazybones
- https://github.com/googlemaps/android-maps-compose