Android 13 のリリースに関して以下のような Serializable / Parcelable の扱いがしんどいという話があった。この記事ではその後どうなったかについて簡単に記録しておこうと思う。
先に結論を書いておくと、 AndroidX Core に compatible API が実装されたのでそれらを使えば OK という状況になった*1。
BundleCompat: https://cs.android.com/androidx/platform/frameworks/support/+/0b53c8f419cc81ca4dfc0c5e1e9e976fc350fe11:core/core/src/main/java/androidx/core/os/BundleCompat.javaIntentCompat: https://cs.android.com/androidx/platform/frameworks/support/+/69c5f876a75a35569bc8a3fbdc75daa809606b89:core/core/src/main/java/androidx/core/content/IntentCompat.javaParcelCompat: https://cs.android.com/androidx/platform/frameworks/support/+/2d0bac96f2d8f9ef7dd1d988e9c43fc622369977:core/core/src/main/java/androidx/core/os/ParcelCompat.java
スライドの要点
- Android 13 (API 33) で
SerializableやParcelableを取得する新しい API が実装された - 既存の
SerializableやParcelableを取得する API が deprecated になった - Compatible API の提案はなされているが (2022年末時点では) 未実装
- https://issuetracker.google.com/issues/243986223
- スライドで紹介されていた↑は現在
status: duplicateとして https://issuetracker.google.com/issues/242048899 にリンクが向けられている
- スライドで紹介されていた↑は現在
- https://issuetracker.google.com/issues/243986223
- Android 13 では
getParcelableに特定の条件で NPE を発生させるバグがあり利用は避けた方が無難
その後
Parcelable 向けの対応
https://issuetracker.google.com/issues/242048899 を読むと、実はスライド発表時点で Parcelable 関係の compatible API の対応については既に実装されていたことがわかる。ただしその時点では未リリースだったし、 issue の関連付けも行われていなかった*2。この変更は年が明けてすぐの 2023-01-11 に行われた AndroidX Core の 1.10.0-alpha01 でリリースされている。
- CL: https://android-review.googlesource.com/c/platform/frameworks/support/+/2214807
- Release note: https://developer.android.com/jetpack/androidx/releases/core#1.10.0-alpha01
Serializable 向けの対応
上記の Parcelable への対応に関する issue に以下の issue が Serializable 向けの feature request としてリンクされており、こちらでトラッキングされるものと思って見ていたが結局使われることはなかった。
その後以下の issue と CL が提出され、 Serializable についてはこちらで話が進められることになった。
- issue: https://issuetracker.google.com/issues/317403466
- CL: https://android-review.googlesource.com/c/platform/frameworks/support/+/2890126
この変更は 2024-01-10 に AndroidX Core の 1.13.0-alpha03 でリリースされている。なぜか release note に記載はない。
まとめ
- AndroidX Core の
BundleCompat,IntentCompat,ParcelCompatを使おう
*1:Serializable に関しては AndroidX Core 1.13.0-alpha03 からなので 2024-03-31 時点で stable は未リリース
*2:NPE バグの報告 issue にはリンクされていた https://issuetracker.google.com/issues/240585930#comment6