Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Unclutter your Jetpack - An opinionated look at...

Unclutter your Jetpack - An opinionated look at Googles library collection

Remember when Google hit the Reset button to clean up the mess of its Android support libraries? Since then, a ton of new Jetpack libraries have been created. Some are obvious choices, like compose. Others you may not have heard of at all, for example palette and window. Depending on how we count, there are way more than 100 artefacts waiting to be added to our apps. If you are feeling lost you are not alone. In this talk, we'll look at what's there, what's useful, and what's obsolete. And you'll learn about a few true gems.

Thomas Künneth

July 04, 2024
Tweet

More Decks by Thomas Künneth

Other Decks in Technology

Transcript

  1. • Over 100 libraries, tools, and guidance for Android app

    development • Designed to ◦ streamline development ◦ reduce boilerplate code ◦ ensure consistency across devices and Android versions • Goal: help developers write clean, maintainable, and efficient code
  2. • In the early days Android improved and expanded at

    the speed of light • Roll out to existing devices was slow at best • Adoption of new features was slow, too • The dreadful API-level branches soon appeared
  3. • Combat fragmentation with support and backporting libraries • In

    the course of time, they became a mess ◦ Inconsistent versioning ◦ Different versions, depending on the API level ◦ Lack of, or incomplete, backports
  4. • Jetpack was introduced in 2018 (API level 28) •

    Reboot – trying to fix the mess • More than just libraries ◦ Improved documentation ◦ New and updated guidelines ◦ Samples
  5. • Many Jetpack libraries are written in Java • Some

    offer Kotlin extensions (-ktx) • Others don’t
  6. • Fragmentation still an issue today, but in a different

    way • Less about missing features, more about behavior changes • Jetpack does a decent job in shielding these
  7. Role of Jetpack has changed It provides an additional API

    landscape that is often preferred over platform APIs (MAD skills)
  8. Not deprecated (yet), but … • Good old Views and

    related concepts (layout files, view binding, …) Jetpack Compose • JobScheduler, Services, Alarms Jetpack Work Manager whenever possible • Quite a few framework packages and classes, for example android.media.MediaController2 deprecated
  9. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle
  10. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle Media
  11. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle Media Navigation
  12. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle Media Navigation Security
  13. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle Media Navigation Security Performance / Test
  14. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle Media Navigation Security Performance / Test UI
  15. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle Media Navigation Security Performance / Test UI Graphics
  16. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle Media Navigation Security Performance / Test UI Graphics Data
  17. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components Lifecycle Media Navigation Security Performance / Test UI Graphics Data Beyond phones
  18. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  19. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  20. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  21. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  22. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  23. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  24. • Jetpack libraries (components) can have subordinate components (Maven artifacts)

    • Among others: ◦ compose ◦ privacysandbox ◦ wear • Some subordinate artefacts are mentioned in the Jetpack overview docs explicitly • …others aren’t
  25. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  26. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  27. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  28. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  29. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  30. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  31. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  32. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components
  33. activity ads annotation appcompat appsearch arch.core asynclayoutinflater autofill benchmark biometric

    bluetooth browser car-app camera cardview collection compose compose.animation compose.compiler compose.foundation compose.material compose.material3 compose.runtime compose.ui concurrent constraintlayout contentpager coordinatorlayout core core.uwb credentials cursoradapter customview databinding datastore documentfile draganddrop drawerlayout dynamicanimation emoji emoji2 enterprise exifinterface fragment games glance graphics gridlayout health health.connect heifwriter hilt input interpolator javascriptengine jetifier leanback legacy lifecycle lint loader localbroadcastmanager media media2 media3 mediarouter multidex metrics navigation paging palette percentlayout preference print privacysandbox.activity privacysandbox.ads privacysandbox.plugins privacysandbox.sdkruntime privacysandbox.tools privacysandbox.ui profileinstaller recommendation recyclerview remotecallback resourceinspection room savedstate security sharetarget slice slidingpanelayout startup sqlite swiperefreshlayout test test.uiautomator textclassifier tracing transition tv tvprovider vectordrawable versionedparcelable viewpager viewpager2 wear wear.compose wear.protolayout wear.tiles wear.watchface webkit window window.extensions.core work Material Design Components .role
  34. Palette • Extract representative color palettes from images • Latest

    update: September 21, 2018 • Stable Release: 1.0.0 (androidx.palette:palette-ktx:1.0.0) • Package: androidx.palette.graphics
  35. • Palette is a helper class to extract prominent colors

    from an image • A number of colors with different profiles are extracted: ◦ Vibrant, Vibrant Dark, Vibrant Light ◦ Muted, Muted Dark, Muted Light • Swatch represents a color swatch generated from an image's palette. The RGB color can be retrieved by getting rgb
  36. Emoji2 • Display emoji in current and older devices •

    Latest update: December 13, 2023 • Stable Release: 1.4.0 • Alpha Release: 1.5.0-alpha01 (androidx.emoji2:emoji2-emojipicker:1.5.0-alpha01) • Package: androidx.emoji2.emojipicker https://developer.android.com/jetpack/androidx/releases/emoji2
  37. Core-Role • Name and documentation for roles that might be

    available in the system • Latest update: December 15, 2021 • Release Candidate: 1.1.0-rc01 (androidx.core:core-role:1.1.0-rc01) • Package: androidx.core.role One of the smallest Jetpack libraries
  38. What is a role? • Unique name within the system

    associated with certain privileges • Roles currently defined: ROLE_ASSISTANT, ROLE_BROWSER, ROLE_CALL_REDIRECTION, ROLE_CALL_SCREENING, ROLE_DIALER, ROLE_EMERGENCY, ROLE_HOME, ROLE_NOTES, ROLE_SMS, ROLE_WALLET • Systems not necessarily support all roles, so always query if the role is available using isRoleAvailable
  39. • While multiple applications may qualify for a role, only

    a subset can become role holders • To qualify for a role, apps must meet certain requirements, for example defining certain components in the manifest • Requirements can be found in androidx.core.role.RoleManagerCompat
  40. • Since the last Jetpack library update, the framework class

    RoleManager received additions, for example ROLE_NOTES (API level 34) • RoleManagerCompat lacks factory functions that ensure a consistent behavior on older Android versions (RoleManager was added with API level 29) • In its current form Core-Role looks more than some sort of documentation than a component
  41. • Jetpack covers a wide area from obvious to niche

    • Documentation for the rock star libraries is excellent • Older libraries need a documentation update (often, links no longer work)
  42. • Documentation landing page no longer reflects the current state

    of Jetpack ◦ Subordinate artifacts are not always reflected ◦ Deprecated clone versions are not immediately noticeable ◦ The categories should be revised and updated • Taking into account all subordinate libraries, Jetpack likely has almost 200 artifacts ◦ Are their transitive dependencies still manageable? ◦ Makes this fine-grained approach still sense? • Is shifting even more functionality from the framework to Jetpack a wise approach?
  43. • The more libraries your app consumes, the more important

    the use of baseline profiles becomes • Still, maybe at some point the ahead of time compilation must be done before downloading the app