Slide 1

Slide 1 text

How To: Develop an app for Android and iOS in Java Alexey Buzdin, September 2015

Slide 2

Slide 2 text

@AlexeyBuzdin Developer / Trainer at C.T.Co

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Angry Birds

Slide 5

Slide 5 text

Inbox

Slide 6

Slide 6 text

Spotify

Slide 7

Slide 7 text

Twitter

Slide 8

Slide 8 text

go X-platform? Go Native or

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

New product checklist - Release date - Platform count - Platform priorities - App future __________ __________ __________ __________ ? ? ? ?

Slide 11

Slide 11 text

- Release date - Platform count - Platform priorities - App future __________ __________ __________ __________ 1 New product checklist

Slide 12

Slide 12 text

- Release date - Platform count - Platform priorities - App future Native __________ __________ __________ __________ 1 New product checklist

Slide 13

Slide 13 text

- Release date - Platform count - Platform priorities - App future __________ __________ __________ __________ All Fast All at once ? New product checklist

Slide 14

Slide 14 text

- Release date - Platform count - Platform priorities - App future __________ __________ __________ __________ All Fast Cordova / PhoneGap All at once New product checklist Short Lasting

Slide 15

Slide 15 text

Cordova / PhoneGap

Slide 16

Slide 16 text

- Performance problems - Non native UI - Easy to add Platforms - One codebase - Native interop Cordova / PhoneGap Consequences

Slide 17

Slide 17 text

- Release date - Platform count - Platform priorities - App future __________ __________ __________ __________ All Fast All at once Short Lasting New product checklist

Slide 18

Slide 18 text

- Release date - Platform count - Platform priorities - App future __________ __________ __________ __________ All Fast Xamarin Forms / CodenameOne All at once Short Lasting New product checklist

Slide 19

Slide 19 text

Xamarin Forms / CodenameOne

Slide 20

Slide 20 text

- Performance like native - Native UI - Hard to modify gen code - Native interop - One codebase Xamarin Forms / CodenameOne Consequences

Slide 21

Slide 21 text

- Release date - Platform count - Platform priorities - App future __________ __________ __________ __________ All Long One by One Long living New product checklist

Slide 22

Slide 22 text

- Release date - Platform count - Platform priorities - App future __________ __________ __________ __________ All Long Xamarin / RoboVM / Tengu One by One Long living New product checklist

Slide 23

Slide 23 text

Xamarin / RoboVM / Tengu

Slide 24

Slide 24 text

- Performance like native - Native UI - Native library binding - Shared common core - Separate UI modules per platform Xamarin / RoboVM / Tengu Consequences

Slide 25

Slide 25 text

http://java.dzone.com/articles/state-native-vs-web-vs-hybrid Great article

Slide 26

Slide 26 text

Xamarin / RoboVM / Tengu

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Core UI UI With one language

Slide 29

Slide 29 text

Core UI UI With one language 30-50% 50-70%

Slide 30

Slide 30 text

C# Java iOS Xamarin / RoboVM / Tengu

Slide 31

Slide 31 text

what are we sharing?

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

MVVM ViewModel Model View

Slide 34

Slide 34 text

View - User Interface Model - Logic and Data ViewModel - binds UI properties with internals - communicate with commands

Slide 35

Slide 35 text

MVVM ViewModel Model View

Slide 36

Slide 36 text

MVVM View Model ViewModel shared

Slide 37

Slide 37 text

Activity ViewController ViewModel Service DAO

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

Activity ViewController onLongClick(coord) ViewModel putPoint()

Slide 40

Slide 40 text

Activity ViewController onLongClick(coord) ViewModel putPoint() DAO savePoint()

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

Activity ViewController search(input) ViewModel search(input)

Slide 43

Slide 43 text

Activity ViewController search(input) ViewModel search(input) Service internalSearch(input)

Slide 44

Slide 44 text

Activity ViewController search(input) ViewModel search(input) Service internalSearch(input) sends ShowLocationEvent

Slide 45

Slide 45 text

RoboVM 1.8.0 Released yesterday http://www.robovm.org/

Slide 46

Slide 46 text

-Java bytecode to native -familiar infrastructure gradle, maven, Idea, eclipse java library reuse -ios lib binding; Robopods -Debugger

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

-uses android-rt library -no code generation -has reflection support -xcode ui bindings jackson or gson should work

Slide 50

Slide 50 text

Core UI UI With Java

Slide 51

Slide 51 text

-Library reuse Together -Build scripts reuse -Model / persistance reuse -Java 8 with retrolambda

Slide 52

Slide 52 text

More sharing?

Slide 53

Slide 53 text

Activity ViewController onClick() ViewModel DAO savePoint(coord) saveCurrentLocation()

Slide 54

Slide 54 text

Activity ViewController onClick() ViewModel DAO savePoint(coord) ? saveCurrentLocation()

Slide 55

Slide 55 text

Activity ViewController onClick() ViewModel saveCurrentLocation() DAO savePoint(coord) ? Service getCoord()

Slide 56

Slide 56 text

Service IGPSService Android Impl iOS Impl shared client- specific

Slide 57

Slide 57 text

How to provide igpsservice?

Slide 58

Slide 58 text

- dao = new dao()

Slide 59

Slide 59 text

- gps = new iOSGPSservice() - dao = new dao()

Slide 60

Slide 60 text

- vm = new ViewModel(gps, dao) - gps = new iOSGPSservice() - dao = new dao()

Slide 61

Slide 61 text

- new Activity(vm) - vm = new ViewModel(gps, dao) - gps = new iOSGPSservice() - dao = new dao()

Slide 62

Slide 62 text

Dependency injection

Slide 63

Slide 63 text

which di?

Slide 64

Slide 64 text

which di? guice or weld!

Slide 65

Slide 65 text

which di? guice or weld! code generation sorry

Slide 66

Slide 66 text

ever heard of Dagger? http://square.github.io/dagger/

Slide 67

Slide 67 text

COMPILE-TIME CODE GENERATION!* Dagger features *partially

Slide 68

Slide 68 text

COMPILE-TIME CODE GENERATION!* Dagger features *partially sorry won’t work on and

Slide 69

Slide 69 text

ever heard of Dagger 2.0? http://google.github.io/dagger/

Slide 70

Slide 70 text

COMPILE-TIME CODE GENERATION! Dagger 2.0 features will work on and

Slide 71

Slide 71 text

https://github.com/LArchaon/robovm-dagger2-sample

Slide 72

Slide 72 text

Summary -no silver bullet -java xamarin is here! -think of reuse in advance -involve in Robovm design

Slide 73

Slide 73 text

q&A

Slide 74

Slide 74 text

http://ej.uz/jug-gdg-vilnius-2015 September 24