Android in Practice (long)

103e1ebcacd620770cf32a36b9aba17e?s=47 AppFoundry
February 16, 2018

Android in Practice (long)

Presented by Siebe Sysmans

103e1ebcacd620770cf32a36b9aba17e?s=128

AppFoundry

February 16, 2018
Tweet

Transcript

  1. Android in Practice door Siebe Sysmans

  2. Siebe Sysmans Android Consultant

  3. None
  4. None
  5. Projecten

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

    Bijleren • Dit
  7. None
  8. None
  9. None
  10. None
  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
  12. Side events

  13. None
  14. None
  15. None
  16. None
  17. None
  18. Tools

  19. Android Studio

  20. Emulator

  21. Postman / PAW

  22. GIT / SourceTree

  23. Confluence / JIRA

  24. TeamCity / Crashlytics Beta

  25. Sketch

  26. Android Development Project Structure

  27. Build variants • buildType en productFlavors • Bijvoorbeeld: • buildType

    → debug, productie, … • productFlavor → environment
  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
  29. Project structure

  30. Android Development View Libraries

  31. Butter knife

  32. Butter knife • Geen findViewById(…) meer. • Bind views, resources,

    onClick, … • Genereert code tijdens de build
  33. Picasso / Glide

  34. Picasso / Glide • Gemakkelijk afbeelding laden • Afbeeldingen cachen

    • Afbeeldingen transformeren • Placeholder en error ondersteuning
  35. Android Development Dependency Injection Libraries

  36. Dagger2

  37. Dagger2 • Dependency injection framework • Loskoppeling • Uitbreidbaar •

    Onderhoudbaar • Door Google en Square
  38. Android Development Service Libraries

  39. OkHttp

  40. OkHttp • Vervanging van Apache HTTP client • Verbetering in

    stabiliteit • Verbetering in compressie • Silent recovery • Synchroon blokkerend • Asynchroon met callbacks
  41. Retrofit

  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
  43. Android Development Database Libraries

  44. Database Libraries • Wat we willen → ORM • Veel

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

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

    Eenvoudige API voor Insert, Select, … • Migratie oplossing • SQLite • Eenvoudig in combinatie met Retrofit
  47. Na development

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

    • Release • Release Opvolging
  49. Peer review • Andere developer kijkt naar de code •

    Kijkt of de huisstijl gerespecteerd is • Weet ook wat er in de code zit
  50. Testing • Geautomatiseerd testen • Unit testing • Integratie testing

    • Developer testing • QA
  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%, …)
  52. Release Opvolging • Crashes en exception logs opvolgen • Play

    Store • Crashlytics • Apteligent (vroeger Crittercism) • Customer care • Analytics data bekijken
  53. Nieuwe Trends

  54. MVP

  55. MVC View Model Controller

  56. MVP View Model Presenter

  57. MVP View Use Cases Business Logic Database Service Presenter

  58. MVP View Model Presenter Retrieves/stores data

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

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

    Delegates click events
  61. MVP Voordelen • Simpeler testen • Mock View en Presenter

    • Gemakkelijk te onderhouden • Gemakkelijk View en Presenter switchen • A/B test • Nieuwe UI iteratie • …
  62. MVP Nadelen • Complexere code • Meer code • (Maar

    zijn dit echt nadelen?)
  63. RXJava

  64. RXJava • Functional Reactive Programming • Zeer gemakkelijke async •

    Ideaal voor • Service calls • Database read/write • UI events • Langdurige taken • …
  65. RXJava Observable Observer onNext(data) onComplete() onError(error)

  66. RXJava Observable Observer Operator Operator Operator

  67. RXJava Observable Observer Observable

  68. Kotlin

  69. Kotlin • JVM programming language • JetBrains • Verbeteringen tegenover

    Java • Extension functions • Single expression functions • Range expressions • String templates • Null-safety • Data classes • …
  70. Kotlin Syntax class User { }

  71. Kotlin Syntax class User(val name: String, val age: Int) {

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

    fun canVote(): Boolean { return age >= 18 } } val siebe = User(Siebe, 26) siebe.canVote()
  73. Kotlin - Extensions fun String.containsSpaces(): Boolean { return this.indexOf(" ")

    != -1 } “tekst”.containsSpaces()
  74. Kotlin Single Expression Function & Ranges fun isTeenager(age) = age

    in 13 .. 19
  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"
  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
  77. Kotlin - Null Safety var text: String = "abc" text

    = null // compilation error val length = text.length
  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?
  79. Siebe Sysmans Android Consultant siebe.sysmans@appfoundry.be https://github.com/appfoundry/academy-android-in-practice

  80. None