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

What's behind BMW Connected?

C887ad592770a197f114d0a1d3e3a5a7?s=47 Jorge Coca
November 17, 2016

What's behind BMW Connected?

Android Listener - November 2016


Jorge Coca

November 17, 2016


  1. What's behind BMW Connected?

  2. Agenda What is Connected? Project structure Technology stack Patterns Team

  3. What is Connected? Personal mobility companion app Journey management Time-to-leave

    noti cations Personal-assistant features
  4. What is Connected? Direct access to vehicle features Vehicle location

    Remote services Vehicle status
  5. Let's talk about Android

  6. Project Structure How do we support BMW, MINI, Rolls Royce,

    BMW Motorrad... only maintaining one code base?
  7. Library project

  8. Library Contains almost all JAVA code Unit tests 3rd party

    libraries Dependency Injection
  9. App UI Theming Spece c con gurations Product avors +

    build types Espresso tests
  10. Bene ts Write once, use everywhere Bug xes are solved

    in all brands at the same time Focus on features, not on maintenance
  11. Technology Stack JAVA (sorry Kotlin, you're not fully supported by

    Google 😞) RxJava + RxAndroid Dagger 2 Retro t + OkHttp DBFlow Calligraphy Mockito
  12. Patterns Pragmatic MVVM (Model View ViewModel) Dependency Injection Unit tests

    (100% coverage in POJO les)
  13. Pragmatic MVVM?

  14. Pragmatic MVVM Not using Android's Data Binding Not ready for

    prime time yet Try to use RxJava as much as we can, but... Sometimes declarative programming is easier to understand and, therfore, maintain Sometimes it feels like MVP (Model View Presenter)
  15. Dependency Injection In Android classes -> eld injection In POJO

    classes -> constructor injection Easier to test and setup Mock dependencies Heavy use of interfaces Provide different implementations based on context/brand/settings...
  16. Unit tests ~2500 tests in less than a minute We

    love Mockito We love less PowerMockito Helpful for mocking 3rd party dependencies Jenkins builds every opened pull requests and runs all the tests Lint checks for missing translations, styling...
  17. Team Practices

  18. Team Practices 1-week sprints Freedom to grab anything from the

    board 90% of the time working on Android 10% working on backend Weekly worldwide demos
  19. Team practices Weekly technology reviews http://androidweekly.net/ Team culture is really

    important to us Collaboration with teams in Chicago, Munich and Shanghai
  20. ... and also

  21. None
  22. None
  23. None
  24. None
  25. BMW Connected v1.0 for Android

  26. Keep in touch @jcocaramos

  27. Thanks