Slide 1

Slide 1 text

Unclutter your Jetpack An opinionated look at Googles library collection Thomas Künneth

Slide 2

Slide 2 text

● 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

Slide 3

Slide 3 text

100 libraries? Just using Compose. Am I missing something?

Slide 4

Slide 4 text

● What’s there ● What’s hot ● What’s not ● Some not so widely known gems

Slide 5

Slide 5 text

https://www.thomaskuenneth.de

Slide 6

Slide 6 text

● 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

Slide 7

Slide 7 text

● 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

Slide 8

Slide 8 text

● 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

Slide 9

Slide 9 text

● Many Jetpack libraries are written in Java ● Some offer Kotlin extensions (-ktx) ● Others don’t

Slide 10

Slide 10 text

● 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

Slide 11

Slide 11 text

Role of Jetpack has changed It provides an additional API landscape that is often preferred over platform APIs (MAD skills)

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

● 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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

No content

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

androidx.activity is a transitive dependency

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

● 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

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

https://developer.android.com/reference/kotlin/androidx/emoji2/emojipicker/package-summary

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

● 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

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

● 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

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

● 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)

Slide 68

Slide 68 text

● 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?

Slide 69

Slide 69 text

● 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

Slide 70

Slide 70 text

https://www.thomaskuenneth.de Thank You!