moderne android-app - aber wie? · › „fernsehen wie noch nie” ›produkt der exaring ag...

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

Upload: others

Post on 21-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

Moderne Android-App - Aber wie?

Daniel Bälz Karlsruhe, 21.11.2016

Page 2: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

2

Star Wars: Episode VI - Return of the Jedi

Page 3: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› „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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› 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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

6

Back to the Future

Page 7: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

7

Motivation

Page 8: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

8

Überlegungen

Design Pattern Bibliotheken

CI/CD

Architektur

Page 9: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› 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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

“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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

› Umsetzung› Mit Bordmitteln› Definition über Interfaces

11

Model-View-Presenter

Page 12: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

12

Model-View-Presenter

Model

PresenterViewDaten für UI

Neue Aktion

AnfrageErgebnis

Page 13: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

13

Clean Architecture

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

Page 14: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

14

Beispiel Verwendung

Page 15: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

15

Beispiel Verwendung

Fragment Presenter Use Case Backend API

ModelModelModel

Page 16: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› 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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

„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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

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

18

RxJava

Page 19: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› Observable› Emittiert Daten› Thread Handling

› Subscriber› Konsumiert Daten

› Operator› Manipuliert Daten

› Subject› Observer und Observable

19

Bestandteile

Page 20: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

20

Umfang

Page 21: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

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

27

Vor- und Nachteile

Page 28: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› 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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

@Modulepublic class BusinessSystemsModule {

@Provides @Singleton public RecommendationsUseCase provideRecommendationsUseCase( BusinessSystemsApi businessSystemsApi,

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

29

Module

Page 30: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

RecommendationsUseCase recommendationsUseCase();}

30

Component

Page 31: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

@InjectRecommendationsUseCase recommendationsUseCase;

31

Injection

Page 32: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› 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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

33

Weitere Bibliotheken

Page 34: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

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

34

The Matrix

Page 35: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› Scrum› Wissenstransfer

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

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

35

Entwicklung

Page 36: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› Gitflow› Gitlab CI

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

› Reporting Crash und Fehler

36

CI/CD

Page 37: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

› 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: Moderne Android-App - Aber wie? · › „Fernsehen wie noch nie” ›Produkt der EXARING AG ›Android-App: Umsetzung seit Januar 2016 mit 2-5 Entwicklern ›Launch: Oktober 2016

Vielen Dank

38