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

Android in Practice (long)

AppFoundry
February 16, 2018

Android in Practice (long)

Presented by Siebe Sysmans

AppFoundry

February 16, 2018
Tweet

More Decks by AppFoundry

Other Decks in Technology

Transcript

  1. • Maandag t.e.m. vrijdag → Project stand-up • Waar is

    iedereen mee bezig • Problemen bovenhalen op geplande tickets • Zijn er onverwachte blokkerende tickets? • Is er iemand idle en kan ergens helpen? • Op vrijdag via Hangouts
  2. Build variants • buildType en productFlavors • Bijvoorbeeld: • buildType

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

    (database, service, ui, …) • 2 voornamelijke manieren voor verdere indeling • Per type class • Per Feature • Soms ook: per feature en type
  4. Butter knife • Geen findViewById(…) meer. • Bind views, resources,

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

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

    stabiliteit • Verbetering in compressie • Silent recovery • Synchroon blokkerend • Asynchroon met callbacks
  7. 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
  8. Database Libraries • Wat we willen → ORM • Veel

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

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

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

    Kijkt of de huisstijl gerespecteerd is • Weet ook wat er in de code zit
  12. (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 • Kan ook gefaseerd (5%, 10%, …)
  13. Release Opvolging • Crashes en exception logs opvolgen • Play

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

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

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

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

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

    fun canVote(): Boolean { return age >= 18 } } val siebe = User(Siebe, 26) siebe.canVote()
  19. 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"
  20. 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
  21. Kotlin - Null Safety var text: String = "abc" text

    = null // compilation error val length = text.length
  22. Kotlin - Null Safety var text: String? = "abc" text

    = null // ok val length = text.length // error: variable ‘text' can be null val length = text?.length // typeOf(length) -> Int?