introduce myself.” · › „fernsehen wie noch nie” ›produkt der exaring ag ›android-app:...

38
Moderne Android-App - Aber wie? Daniel Bälz Karlsruhe, 21.11.2016

Upload: others

Post on 21-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

Moderne Android-App - Aber wie?

Daniel Bälz Karlsruhe, 21.11.2016

Page 2: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

“Greetings, Exalted One. Allow me to introduce myself.”

2

Star Wars: Episode VI - Return of the Jedi

Page 3: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› „Fernsehen wie noch nie”› Produkt der EXARING AG

› Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern

› Launch: Oktober 2016

3

waipu.tv

Page 4: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› TV Livestreams

› Zeitversetzte Streams

› Aufnehmen von Sendungen

› Wiedergabe per App und Chromecast (bald: Fire TV)

› App als erweiterte Fernbedienung

› Programmübersicht

› Persönliche Tipps

4

Feature

Page 6: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

“Roads? Where we're going we don't need roads.”

6

Back to the Future

Page 7: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Gute Grundstruktur bereitstellen› Weiterentwicklung vereinfachen› Wachsende Anforderungen einplanen› Testbarkeit ermöglichen› Trends bei Android einfach integrieren

7

Motivation

Page 8: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

8

Überlegungen

Design Pattern Bibliotheken

CI/CD

Architektur

Page 9: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Android Lifecycle› Activity/Fragment Gottklasse› Abhängigkeiten vom API Level› Kommunikation innerhalb der App› Externe, asynchrone Kommunikation› Testbarkeit (Instrumentation und lokal ausführbar)

9

Herausforderungen

Page 10: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

“I see in your eyes the same fear that would take the heart of me”

10

The Lord of the Rings: The Return of the King

Page 11: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Model: Geschäftslogik (Anbindung Backend)› View: Darstellung (Fragment)› Presenter: Steuerung des Ablaufs

› Umsetzung› Mit Bordmitteln› Definition über Interfaces

11

Model-View-Presenter

Page 12: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

12

Model-View-Presenter

Model

PresenterViewDaten für UI

Neue Aktion

AnfrageErgebnis

Page 13: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

13

Clean Architecture

Quelle: http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

Page 14: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

14

Beispiel Verwendung

Page 15: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

15

Beispiel Verwendung

Fragment Presenter Use Case Backend API

ModelModelModel

Page 16: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Vorteile› Gute Trennung (Separation of Concerns)› Übersichtlichere Klassen› Testbarkeit der einzelnen Komponenten

› Nachteile› Mehraufwand bei der Umsetzung› Mehr Klassen› Lange Aufrufpfade

16

Vor- und Nachteile

Page 17: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

„ReactiveX is a library for composing asynchronous and event-based programs by using observable

sequences.”

17

Reactive Extensions

Quelle: http://reactivex.io/intro.html

Page 18: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Implementiert der Reactive Extensions für Java› Open Source› Android

› RxAndroid: Bindings für Android› RxBinding: UI Widget Bindings

18

RxJava

Page 19: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Observable› Emittiert Daten› Thread Handling

› Subscriber› Konsumiert Daten

› Operator› Manipuliert Daten

› Subject› Observer und Observable

19

Bestandteile

Page 20: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Viele Arten Observable zu erzeugen› Verschiedene Subscriber› Sehr (sehr) viele Operatoren› Mehrere Subjects

20

Umfang

Page 21: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

Subscriber<Integer> subscriber = new Subscriber<Integer>() { @Override public void onCompleted() { }

@Override public void onError(Throwable e) { }

@Override public void onNext(Integer integer) { }};numberObservable.subscribe(subscriber);

21

Subscriber

Page 22: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

Observable<Integer> numberObservable = Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { subscriber.onNext(42); subscriber.onCompleted(); } });

22

Observable

Page 23: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

Observable<Integer> numberObservable = Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { subscriber.onNext(42); subscriber.onCompleted(); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread());

23

Thread Handling

Page 24: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

Observable<Integer> numberObservable = Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { subscriber.onNext(42); subscriber.onCompleted(); } }).map(new Func1<Integer, Integer>() { @Override public Integer call(Integer integer) { return integer * 2; } });

24

Operator

Page 25: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

PublishSubject<Integer> publishSubject = PublishSubject.create();publishSubject.subscribe(subscriber);publishSubject.onNext(0);publishSubject.onNext(1);publishSubject.subscribe(subscriber2);publishSubject.onNext(2);publishSubject.onNext(3);publishSubject.onCompleted();

BehaviorSubject<Integer> behaviorSubject = BehaviorSubject.create(-1);behaviorSubject.onNext(0);behaviorSubject.onNext(1);behaviorSubject.subscribe(subscriber3);behaviorSubject.onNext(2);behaviorSubject.onNext(3);behaviorSubject.onCompleted();

25

Subject

Page 26: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

public Observable<List<Channel>> getChannels() { Observable<List<Channel>> apiCall = authUseCase .getAuthorizationStringAsObservable() .flatMap(new Func1<String, Observable<? extends List<Channel>>>() { @Override public Observable<? extends List<Channel>> call(String auth) { return businessSystemsApi.getChannelData(auth); } }); return authUseCase.loginWhenRequired(apiCall) .doOnNext(new Action1<List<Channel>>() { @Override public void call(List<Channel> channels) { dbHelper.insertChannelList(channels); } }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());}

26

Beispiel aus waipu.tv

Page 27: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Vorteile› Thread Handling› Datenmanipulation› Komplexe Szenarien lösbar

› Nachteile› Verwalten der Subscription› Gefahr von Memoryleaks› Lernkurve

27

Vor- und Nachteile

Page 28: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Bibliothek für Dependency Injection› Single Responsibility› Abhängigkeiten in zentraler Klasse verwaltet› Singleton

› Codegenerierung zur Compile-Zeit› Komponenten und Modulsystem

28

Dagger 2

Page 29: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

@Modulepublic class BusinessSystemsModule {

@Provides @Singleton public RecommendationsUseCase provideRecommendationsUseCase( BusinessSystemsApi businessSystemsApi,

AuthUseCase authUseCase) { return new RecommendationsUseCase(businessSystemsApi, authUseCase); }}

29

Module

Page 30: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

@Component(modules = {SharedPreferencesModule.class, BusinessSystemsModule.class})public interface AppComponent { void inject(WaipuApplication application); void inject(BaseActivity baseActivity);

RecommendationsUseCase recommendationsUseCase();}

30

Component

Page 31: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

@InjectRecommendationsUseCase recommendationsUseCase;

31

Injection

Page 32: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Vorteile› Klare Struktur der Abhängigkeiten› Einfache Verwendung› Austauschbarkeit für Tests

› Nachteile› Mehr eigene Klassen› Viele generierte Klassen

32

Vor- und Nachteile

Page 33: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Support Library› Retrofit› Glide› Timber› Butterknife› Joda Time› Stetho

33

Weitere Bibliotheken

Page 34: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

“[...] and I show you how deep the rabbit hole goes.”

34

The Matrix

Page 35: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Scrum› Wissenstransfer

› Kein Inselwissen› Merge Request mit intensivem Review› Diskussionen› Dokumentation

› Kritische Betrachtung des aktuellen Stands› Bereitschaft zur Veränderung

35

Entwicklung

Page 36: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Gitflow› Gitlab CI

› YAML zur Jobbeschreibung› Docker Images› Testausführung› Upload des Artefakt

› Reporting Crash und Fehler

36

CI/CD

Page 37: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

› Initialen Mehraufwand nicht scheuen› Konsequente Umsetzung lohnt sich› Vorhandene Bibliotheken nutzen› Bibliotheken/Abhängigkeiten erzeugen neue Probleme› Automatisiertes Testen immer noch umständlich

37

Fazit

Page 38: introduce myself.” · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016 3 waipu.tv

Vielen Dank

38