Android Weekly Issue #472
The dangers of JSON + default values
如果一个可空字段的默认值是非空的:
data class Foo(val bar: String? = "oops")
序列化和反序列化有可能会得到不一样的对象.
因为:
- 序列化的时候给这个字段为null.
- 反序列化的时候给这个字段为默认值.
解决方案就是应该避免给可空字段加上非空值.
这个人还给moshi写了个request feature: https://github.com/square/moshi/issues/1358
Navigating with Animations in Jetpack Compose
作者的库:
https://github.com/KaustubhPatange/navigator
处理navigation, 并且有很多feature, 支持动画.
作者的观点: navigation不是问题, 处理back才是难点.
还有一些库比如:
- https://github.com/zsoltk/compose-router
- https://github.com/Zhuinden/simple-stack-compose-integration
Bluetooth Pairing
蓝牙扫描和配对需要权限.
Android 12以前还需要ACCESS_LOCATION_FINE
权限. 非常困惑.
Android 12加了BLUETOOTH_SCAN
和BLUETOOTH_CONNECT
权限.
文中讨论了几种适配声明方案.
Show layout bounds from command line
alias boundson='adb shell setprop debug.layout true; adb shell service call activity 1599295570 > /dev/null'
alias boundsoff='adb shell setprop debug.layout false ; adb shell service call activity 1599295570 > /dev/null'
An effective testing strategy for Android (Part 1)
关于测试策略的各种讨论.
From Nothing to Material Transitions
关于动画的讨论和实现.
Code
- https://github.com/RHSaliya/PasswordStrengthView 展示密码强度.
- https://github.com/aaronoe/ComposeArcade 一个compose的数独app, 包括桌面版本.
- https://github.com/KaustubhPatange/navigator 导航库, 也有compose版本.
- https://github.com/Spikeysanju/JetQuotes-Desktop 一个名人名言应用, 也有desktop版本. 其中提到的一些库很值得研究一下.