Posted by David Winer, Product Manager
- Synthetics let you replace calls to
- Parcelize allows you to remove boilerplate and easily create Parcelables through the
Since then, we have released View Binding for Android, an officially supported library that has deep integration with the Android build toolchain and provides similar functionality as Kotlin synthetics. While we continue to recommend Parcelize, a number of drawbacks have appeared with using Kotlin synthetics:
- They pollute the global namespace
- They don’t expose nullability information
- They only work in Kotlin code
JetBrains originally developed the Android Kotlin Extensions plugin, and together we have discussed the pros and cons of continuing to maintain synthetics: we strive to ensure long term support for APIs where we can but want to guide developers towards best practices that make for healthy codebases and, ultimately, happy users.
Over the course of the next year, our teams will be jointly deprecating synthetics in favor of continuing to support our recommended option, View Binding. Here’s what that means:
- If you are using Parcelize, you can continue to use the same annotations and APIs. The annotation package will change to
kotlinx.parcelize, however, and In your module-level Gradle file, you should start using the standalone
kotlin-parcelizeplugin instead of
android-kotlin-extensions. You’ll be able to find documentation for Parcelize on the Android developer documentation site.
- If you are using Android Kotlin synthetics, you should migrate to View Binding. Check out our migration guide for more details.
The deprecation period starts with Kotlin 1.4.20, released today.
android-kotlin-extensions will be removed in a future Kotlin release during or after September 2021. Long term, we will continue to maintain the
kotlin-parcelize plugin, and you can continue to file issues on Parcelize in the Android Studio issue tracker.