cutting edge android stack. one year later

54
Cutting edge Android stack One year later Anton Rutkevich, Juno Igor Korotenko, Juno

Upload: anton-rutkevich

Post on 18-Jan-2017

189 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Cutting edge android stack. One year later

Cutting edge Android stack

One year later

Anton Rutkevich, JunoIgor Korotenko, Juno

Page 2: Cutting edge android stack. One year later
Page 3: Cutting edge android stack. One year later

What’s in the stack?

Page 4: Cutting edge android stack. One year later

What’s is the stack?

Page 5: Cutting edge android stack. One year later

Core ideas

Page 6: Cutting edge android stack. One year later

Core ideas

1.Safetya. Immutability

b. Easy concurrency

2.Concise code

3.Modularity (SOLID-inspired, Clean architecture)

4.Test-ready

Page 7: Cutting edge android stack. One year later

Safety. Immutability

Page 8: Cutting edge android stack. One year later

Basics

1.No state - simpler program

a. “Simple made easy” talk by Rich Hickey

2.Mutable state is the core of concurrency issues

3.Allows to perform more optimizations

4.Immutability is transitive

a. Can be broken by one mutable item

Page 9: Cutting edge android stack. One year later

Reference immutability

Page 10: Cutting edge android stack. One year later

Objects immutability. Data classes

Page 11: Cutting edge android stack. One year later

Collections immutability

Page 12: Cutting edge android stack. One year later

Rx

1.Implicitly relies on immutable data in streams

2.Hides the state in operators & subjects

Page 13: Cutting edge android stack. One year later

Safety. Easy concurrency

Page 14: Cutting edge android stack. One year later

Concurrency is hard

Page 15: Cutting edge android stack. One year later

Rx approach to concurrency

Page 16: Cutting edge android stack. One year later

Safety. Other

Page 17: Cutting edge android stack. One year later

Safe by default

1.Immutability by default

2.Classes & methods are final by default

3.Nested classes don’t hold a reference to the outer

4....

Page 18: Cutting edge android stack. One year later

Null safety

Page 19: Cutting edge android stack. One year later

Functional style

Page 20: Cutting edge android stack. One year later

Advanced type safety. Why?

More checks are guaranteed at compile time

Page 21: Cutting edge android stack. One year later

Type safety. Sum types 1. TimeDiff

Page 22: Cutting edge android stack. One year later

Type safety. Sum types 2. Network response

Page 23: Cutting edge android stack. One year later

Concise code

Page 24: Cutting edge android stack. One year later

Properties, type inference

Page 25: Cutting edge android stack. One year later

Smart casts

Page 26: Cutting edge android stack. One year later

Stream-like API

Page 27: Cutting edge android stack. One year later

Easy to understand complex data-flow

Page 28: Cutting edge android stack. One year later

Modularity. Architecture

Page 29: Cutting edge android stack. One year later

High-level view on architecture

ViewModel

Vie

w

starts hereRetrofit BL homeSOLID

Dagger 2 helps here

Service A

Service B

Service D

Net

wor

king

ends here

Page 30: Cutting edge android stack. One year later

Testability

Page 31: Cutting edge android stack. One year later

Main ideas

1.Separation of concerns (clean architecture principles)

2.Dependencies of SUT are interfaces

3.Business logic is isolated from platform code

4.UI layer can be replaced for tests

Page 32: Cutting edge android stack. One year later

Rx

1.TestScheduler

2.TestSubscriber

Page 33: Cutting edge android stack. One year later

Mockito

1.Still using PowerMock in “legacy” parts

2.Clean architecture eliminates the need of PowerMock

Page 34: Cutting edge android stack. One year later

AssertJ

Just AssertJ

Page 35: Cutting edge android stack. One year later

Roboliectric

No need for it, as UI & business logic are isolated from the

platform

Page 36: Cutting edge android stack. One year later

Spock + Groovy

1.Works

2.Hard to set up

3.Fun to use, when everything works

4.Not really fun when something breaks (dynamic Groovy)

Page 37: Cutting edge android stack. One year later

Kotlin

Page 38: Cutting edge android stack. One year later

Interop

Page 39: Cutting edge android stack. One year later

Koltin interop’s rule of thumb

1.No black magic -> works fine

2.Black magic ->

most probably works fine, but need to re-check

Page 40: Cutting edge android stack. One year later

Koltin + Dagger 2

Initially DI code was in Java

Now, with kapt, DI can also be in Kotlin

Page 41: Cutting edge android stack. One year later

Koltin + Retrofit

Just works :)

Page 42: Cutting edge android stack. One year later

Koltin + Rx

Works even better than Java + RxJava

1.Lambdas (non-capturing)

2.Extension functions

Page 43: Cutting edge android stack. One year later

Koltin + Gson

Gson uses reflection to set field values

-> can set null into non-nullable field.

Beware!

Page 44: Cutting edge android stack. One year later

Rx + Retrofit

Retrofit provides API for Rx:

Response as Observable<T>

Page 45: Cutting edge android stack. One year later

What other libs bother you?

Page 46: Cutting edge android stack. One year later

Challenges

Page 47: Cutting edge android stack. One year later

Testing. Koltin + Mockito

1.Everything is final by default in Kotlin

a. Solution 1: PowerMock. Dirty

b. Solution 2: Clean architecture. Clean

2.Mockito returns nulls where Koltin expects non-nullable

a. Use Mockito-Kotlin library

Page 48: Cutting edge android stack. One year later

Java -> Kotlin interop

Beware of nulls that come from the Java’s dark side

String!

Page 49: Cutting edge android stack. One year later

Static code analyzers

1.Findbugs

a. ?

2.Pmd

a. ?

3.Lint

a. Works in IDE now, command line support comes soon

4.Compiler does lots of what static analyzers do in Java

Page 50: Cutting edge android stack. One year later

Compile time

1.Was kind of a problem:

a. Clean ~3 min

b. Incremental ~55 sec

c. Of which compile Kotlin ~50 sec

2.Much better with Koltin 1.0.2 & dex in process

a. Clean ~2m

b. Incremental ~30 sec

c. Of which compile Kotlin clean ~50 sec, incremental ~20 sec

Page 51: Cutting edge android stack. One year later

Method count

1.Kotlin ~6K

2.RxJava ~5K

3.Multidex works

Page 52: Cutting edge android stack. One year later

Proguard

Works, causes ~ same amount of issues as in Java

Page 53: Cutting edge android stack. One year later

Be a stream

Page 54: Cutting edge android stack. One year later

Outro