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

Android in Practice

Siebe Sysmans
November 30, 2016

Android in Practice

An introduction for students into the consultancy world of Android development.

Siebe Sysmans

November 30, 2016
Tweet

More Decks by Siebe Sysmans

Other Decks in Education

Transcript

  1. • ~ 30 IT’ers • 1 Android developer • 1

    iOS developer • 1 Designer • 6 Project Managers • 1 Service Manager • 4 QA • 5 Ops • 3 Big Data • … Website developers (.NET)
  2. • Maandag → Full IT team stand-up • Algemene stand

    van zaken in IT • Lopende en nieuwe projecten indelen • Release coördineren • Problemen afgelopen week bespreken • Maandag t.e.m. vrijdag → Project stand-up • Werk binnen project verdelen en plannen
  3. Build variants • buildType en productFlavors • Bijvoorbeeld: • buildType

    → debug, productie, … • productFlavor → environment
  4. Package Structure • Top-level package indelen in grote logische blokken

    (database, service, view, …) • 2 voornamelijke manieren voor verdere indeling • Per type class • Per Feature • Groot project: per feature en type
  5. Butter knife • Geen findViewById(…) meer. • Bind views, resources,

    onClick, … • Genereert code tijdens de build
  6. Picasso / Glide • Gemakkelijk afbeelding laden • Afbeeldingen cachen

    • Afbeeldingen transformeren • Placeholder en error ondersteuning
  7. OkHttp • Vervanging van Apache HTTP client • Verbetering in

    stabiliteit • Verbetering in compressie • Silent recovery • Synchroon blokkerend • Asynchroon met callbacks
  8. Retrofit • Genereert netwerkcode aan de hand van een simpel

    te schrijven Interface tijden build • Converters voor Gson en Jackson (json), SimpleXML, …, roll-your-own. • Synchroon blokkerend • Asynchroon met callbacks
  9. Database Libraries • Wat we willen → ORM • Veel

    libraries beschikbaar • ORMLite • GreenDao • DBFlow • SugerORM • (Realm) • …
  10. Database Libraries • Wat we willen → ORM • Veel

    libraries beschikbaar • ORMLite • GreenDao • DBFlow • SugerORM • (Realm) • …
  11. DBFlow • Elimineert boilerplate • Genereert code tijdens build •

    Eenvoudige API voor Insert, Select, … • Migratie oplossing • SQLite • Eenvoudig in combinatie met Retrofit
  12. Peer review • Andere developer kijkt naar de code •

    Kijkt of de huisstijl gerespecteerd is • Weet ook wat er in de code zit
  13. (Beta) Release • Build maken met release keystore • Goed

    bewaren → anders nooit meer updaten • Beta release naar Google+ Community • Beide op de Google Developer Console • Paar uur later beschikbaar
  14. Release Opvolging • Crashes en exception logs opvolgen • Play

    Store • Crashlytics • Apteligent (vroeger Crittercism) • Customer care • Analytics data bekijken
  15. MVP

  16. MVP Voordelen • Simpeler testen • Mock View en Presenter

    • Gemakkelijk te onderhouden • Gemakkelijk View en Presenter switchen • A/B test • Nieuwe UI iteratie • …
  17. RXJava • Functional Reactive Programming • Zeer gemakkelijke async •

    Ideaal voor • Service calls • Database read/write • UI events • Langdurige taken • …
  18. Kotlin • JVM programming language • JetBrains • Verbeteringen tegenover

    Java • Extension functions • Single expression functions • Range expressions • String templates • Null-safety • Data classes • …
  19. Kotlin Syntax class User(var name: String, var age: Int) {

    fun canVote(): Boolean { return age >= 18 } } var siebe = User(Siebe, 26) siebe.canVote()
  20. Kotlin - String Templates val i = 10 val s

    = “i = $i” val s = "abc" val str = "$s.length is ${s.length}” // evaluates to "abc.length is 3"
  21. Kotlin - Data Classes data class User(val name: String =

    "", val age: Int = 0) • Genereert: • equals() • hashCode() • toString() —> "User(name=John, age=42)” • copy() • getters en setters
  22. Kotlin - Null Safety var a: String = "abc" a

    = null // compilation error val l = a.length
  23. Kotlin - Null Safety var b: String? = "abc" b

    = null // ok val l = b.length // error: variable 'b' can be null
  24. Kotlin - Null Safety val l = if (b !=

    null) b.length else -1 b?.length