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. Android in Practice
    door Siebe Sysmans

    View Slide

  2. Siebe Sysmans
    Android Consultant

    View Slide

  3. View Slide

  4. View Slide

  5. Projecten

    View Slide

  6. • Technische interviews
    • Stagebegeleiding
    • Begeleiden Android juniors
    • Bijleren
    • Dit

    View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. • 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

    View Slide

  12. Side events

    View Slide

  13. View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. Tools

    View Slide

  19. Android Studio

    View Slide

  20. Emulator

    View Slide

  21. Postman / PAW

    View Slide

  22. GIT / SourceTree

    View Slide

  23. Confluence / JIRA

    View Slide

  24. TeamCity / Crashlytics Beta

    View Slide

  25. Sketch

    View Slide

  26. Android Development
    Project Structure

    View Slide

  27. Build variants
    • buildType en productFlavors
    • Bijvoorbeeld:
    • buildType → debug, productie, …
    • productFlavor → environment

    View Slide

  28. 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

    View Slide

  29. Project structure

    View Slide

  30. Android Development
    View Libraries

    View Slide

  31. Butter knife

    View Slide

  32. Butter knife
    • Geen findViewById(…) meer.
    • Bind views, resources, onClick, …
    • Genereert code tijdens de build

    View Slide

  33. Picasso / Glide

    View Slide

  34. Picasso / Glide
    • Gemakkelijk afbeelding laden
    • Afbeeldingen cachen
    • Afbeeldingen transformeren
    • Placeholder en error ondersteuning

    View Slide

  35. Android Development
    Dependency Injection Libraries

    View Slide

  36. Dagger2

    View Slide

  37. Dagger2
    • Dependency injection framework
    • Loskoppeling
    • Uitbreidbaar
    • Onderhoudbaar
    • Door Google en Square

    View Slide

  38. Android Development
    Service Libraries

    View Slide

  39. OkHttp

    View Slide

  40. OkHttp
    • Vervanging van Apache HTTP client
    • Verbetering in stabiliteit
    • Verbetering in compressie
    • Silent recovery
    • Synchroon blokkerend
    • Asynchroon met callbacks

    View Slide

  41. Retrofit

    View Slide

  42. 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

    View Slide

  43. Android Development
    Database Libraries

    View Slide

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

    View Slide

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

    View Slide

  46. DBFlow
    • Elimineert boilerplate
    • Genereert code tijdens build
    • Eenvoudige API voor Insert, Select, …
    • Migratie oplossing
    • SQLite
    • Eenvoudig in combinatie met Retrofit

    View Slide

  47. Na development

    View Slide

  48. Na development
    • Peer review
    • Testing
    • Beta release
    • Release
    • Release Opvolging

    View Slide

  49. Peer review
    • Andere developer kijkt naar de code
    • Kijkt of de huisstijl gerespecteerd is
    • Weet ook wat er in de code zit

    View Slide

  50. Testing
    • Geautomatiseerd testen
    • Unit testing
    • Integratie testing
    • Developer testing
    • QA

    View Slide

  51. (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%, …)

    View Slide

  52. Release Opvolging
    • Crashes en exception logs opvolgen
    • Play Store
    • Crashlytics
    • Apteligent (vroeger Crittercism)
    • Customer care
    • Analytics data bekijken

    View Slide

  53. Nieuwe Trends

    View Slide

  54. MVP

    View Slide

  55. MVC
    View
    Model Controller

    View Slide

  56. MVP
    View
    Model Presenter

    View Slide

  57. MVP
    View
    Use Cases
    Business Logic
    Database
    Service
    Presenter

    View Slide

  58. MVP
    View
    Model Presenter
    Retrieves/stores data

    View Slide

  59. MVP
    View
    Model Presenter
    Retrieves/stores data
    Provides form
    atted
    data

    View Slide

  60. MVP
    View
    Model Presenter
    Retrieves/stores data
    Provides form
    atted
    data
    Delegates click events

    View Slide

  61. MVP Voordelen
    • Simpeler testen
    • Mock View en Presenter
    • Gemakkelijk te onderhouden
    • Gemakkelijk View en Presenter switchen
    • A/B test
    • Nieuwe UI iteratie
    • …

    View Slide

  62. MVP Nadelen
    • Complexere code
    • Meer code
    • (Maar zijn dit echt nadelen?)

    View Slide

  63. RXJava

    View Slide

  64. RXJava
    • Functional Reactive Programming
    • Zeer gemakkelijke async
    • Ideaal voor
    • Service calls
    • Database read/write
    • UI events
    • Langdurige taken
    • …

    View Slide

  65. RXJava
    Observable Observer
    onNext(data)
    onComplete()
    onError(error)

    View Slide

  66. RXJava
    Observable
    Observer
    Operator
    Operator
    Operator

    View Slide

  67. RXJava
    Observable
    Observer
    Observable

    View Slide

  68. Kotlin

    View Slide

  69. Kotlin
    • JVM programming language
    • JetBrains
    • Verbeteringen tegenover Java
    • Extension functions
    • Single expression functions
    • Range expressions
    • String templates
    • Null-safety
    • Data classes
    • …

    View Slide

  70. Kotlin Syntax
    class User {
    }

    View Slide

  71. Kotlin Syntax
    class User(val name: String, val age: Int) {
    }
    Val siebe = User(Siebe, 26)

    View Slide

  72. Kotlin Syntax
    class User(val name: String, val age: Int) {
    fun canVote(): Boolean {
    return age >= 18
    }
    }
    val siebe = User(Siebe, 26)
    siebe.canVote()

    View Slide

  73. Kotlin - Extensions
    fun String.containsSpaces(): Boolean {
    return this.indexOf(" ") != -1
    }
    “tekst”.containsSpaces()

    View Slide

  74. Kotlin
    Single Expression Function & Ranges
    fun isTeenager(age) = age in 13 .. 19

    View Slide

  75. 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"

    View Slide

  76. 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

    View Slide

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

    View Slide

  78. 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?

    View Slide

  79. Siebe Sysmans
    Android Consultant
    [email protected]
    https://github.com/appfoundry/academy-android-in-practice

    View Slide

  80. View Slide