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

Sharing features among Android applications: ex...

Sharing features among Android applications: experience feedback

What if you could build entire features, ready-to-use, and just share them to all your apps? At Deezer we tackled this challenge for the authentication, a unique library used both by Zen and Deezer.

You will learn how we manage to speed up app development, by integrating entire features in a few lines of code, while handling specific needs of each application.

Jean-Baptiste VINCEY

April 08, 2025
Tweet

More Decks by Jean-Baptiste VINCEY

Other Decks in Programming

Transcript

  1. At Deezer we develop multiple apps • 2008 Deezer •

    2020 Deezer for Creators • 2021 Audiobooks 9
  2. At Deezer we develop multiple apps • 2008 Deezer •

    2020 Deezer for Creators • 2021 Audiobooks • 2023 Zen 10
  3. At Deezer we develop multiple apps • 2008 Deezer •

    2020 Deezer for Creators • 2021 Audiobooks • 2023 Zen • 2025/26 ? 11 ? ?
  4. Should a full feature be developed as a library? A

    simple framework to help on the decision 13
  5. Should a full feature be developed as a library? A

    simple framework to help on the decision • Same needs between all apps? 14
  6. Should a full feature be developed as a library? A

    simple framework to help on the decision • Same needs between all apps? AuthJourney 15
  7. Should a full feature be developed as a library? A

    simple framework to help on the decision • Same needs between all apps? AuthJourney • Low di ff erentiation value? 16
  8. Should a full feature be developed as a library? A

    simple framework to help on the decision • Same needs between all apps? AuthJourney • Low di ff erentiation value? AuthJourney 17
  9. Should a full feature be developed as a library? A

    simple framework to help on the decision • Same needs between all apps? AuthJourney • Low di ff erentiation value? AuthJourney • Customization requirements well de fi ned? 18
  10. Should a full feature be developed as a library? A

    simple framework to help on the decision • Same needs between all apps? AuthJourney • Low di ff erentiation value? AuthJourney • Customization requirements well de fi ned? AuthJourney 19
  11. Timeline of module creation The MVP De fi ne a

    MVP for Zen Refactored the legacy screens and logic to
 a new library 22
  12. Timeline of module creation The MVP De fi ne a

    MVP for Zen Refactored the legacy screens and logic to
 a new library Integrate it in Zen ✨ 23
  13. Timeline of module creation Integration in the main app Complete

    auth methods needed by Deezer Integrate it in Deezer 25
  14. Timeline of module creation Integration in the main app Complete

    auth methods needed by Deezer Integrate it in Deezer Clean all the legacy app code 🗑 26
  15. Icon Con fi guration 35 data class Config( val icons:

    Icons, … ) { data class Icons( @DrawableRes val iconBack: Int ) }
  16. Theming 36 data class Config( val icons: Icons, val theme:

    Theme, … ) { data class Theme( val colors: Colors, val typography: Typography, val shapes: Shapes, ) }
  17. 37

  18. UI Slots 38 data class Config( val icons: Icons, val

    theme: Theme, val slots: Slots, … ) { data class Slots( val header: @Composable () -> Unit, ) }
  19. UI Slots 39 slots = Config.Slots( header = { Image(

    modifier = Modifier.fillMaxWidth(), painter = painterResource(drawable), ) } )
  20. UI Slots 40 slots = Config.Slots( header = { LottieAnimation(

    modifier = Modifier.fillMaxWidth(), composition = composition, progress = { progress }, contentScale = ContentScale.FillBounds, dynamicProperties = dynamicProperties, ) } )
  21. 41

  22. { "data":{ "steps_config":{ "email_or_phone":{ "title":"Email", "input_placeholder":"Email address", "phone_activated":false }, },

    "registration_info_steps":[ "username", "age", "identity" ] } } Backend con fi g 42 42
  23. Challenges we faced • Restrain Designers creativity • Time to

    integrate the feature in all apps • Adapt to apps di ff erent technologies 46
  24. • Google Play Billing ✔ • Account management ✔ What’s

    next ? Other features we could share 48
  25. • Google Play Billing ✔ • Account management ✔ •

    Settings❓ What’s next ? Other features we could share 49
  26. • Google Play Billing ✔ • Account management ✔ •

    Settings❓ • Player❓ What’s next ? Other features we could share 50
  27. Pros and cons of shared features + - Mutualize e

    ff ort Additional initial cost Easier maintenance Harder to customize Evolution bene fi ts all Cannot evolve independently (Faster development) (Or not?) 52
  28. When to share features • Same needs between all apps?

    • Low di ff erentiation value? • Customization requirements well de fi ned? 53
  29. How to share features • De fi ne the API

    • Build with sample app • Choose customization level 54