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