Slide 1

Slide 1 text

Tips and tricks for a successful Android application - Jorge Coca -

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

...first things first

Slide 4

Slide 4 text

Jorge, who do you think you are!?

Slide 5

Slide 5 text

→ Released over 20 apps → Mostly Android, but some iOS too → Half of them have been a disaster!! → ... and the other half are doing pretty good :) → Worked alone, small teams... and large and internationals teams

Slide 6

Slide 6 text

Those who do not learn history are doomed to repeat it — George Santayana

Slide 7

Slide 7 text

Android was initially designed to be a camera operating system

Slide 8

Slide 8 text

Cupcake & Donut April 2009 → First major release → Linux kernel → Java & Eclipse ADT → Main widgets and SDK components → Voice entry support → Gesture framework

Slide 9

Slide 9 text

Eclair October 2009 → Multi account support → Bluetooth → Multitouch → Camera supports flash ⚡

Slide 10

Slide 10 text

Froyo May 2010 → Chrome → Push notifications via C2DM → Flash and GIFs → Improved Market

Slide 11

Slide 11 text

Gingerbread December 2010 → NFC → Improvementes on UI → Support for front camera → Google Wallet (on Nexus S) → Nexus One

Slide 12

Slide 12 text

Honeycomb February 2011 → Optimized for tablet support → Holo interface → Welcome Fragments!

Slide 13

Slide 13 text

Ice Cream Sandwich October 2011 → Holo for phones → Major update of the OS → Editor's choice → Android is here to stay

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Jelly Bean June 2012 → Focus on performance → Support library & → New bluetooth stack → Dev focus on quality → Jake Wharton's first conference

Slide 16

Slide 16 text

KitKat October 2013 → Refreshed interfaced → Android Wear → Nexus 5 and wearables → Android Studio → Gradle

Slide 17

Slide 17 text

Lollipop November 2014 → Material Design → Dalvik → Multiple SIM card → WebView distributed over PlayStore → Dev focus on performance #perfMatters → Android One

Slide 18

Slide 18 text

Marhsmallow October 2015 → Android for Work → Doze → Fingerprint → Runtime permissions → Battery optimizations

Slide 19

Slide 19 text

Nougat August 2016 → Android beta program → Daydream → Multiwindow support → Picture in picture

Slide 20

Slide 20 text

Oreo August 2017 → Kotlin → Architecture components → Focus on modular architectures → Adaptive icons → Notification improvements → Google Play protect → Android Go

Slide 21

Slide 21 text

Challenges → Have clear goals and expectations → Invest your time and energy where it matters → Build for everyone → Crowded market. Be original → Be the first... or be the best

Slide 22

Slide 22 text

Goals and expectations → Research your market → Measurable goals → Realistic expectations → Indie vs. small shop vs. corporation → Functionality vs design... (or both)

Slide 23

Slide 23 text

Invest your time and energy where it matters

Slide 24

Slide 24 text

Time and energy → Your cloud is your first common layer. Use it! → Dedicate efforts to the main use case of your app → What can you share between iOS and Android?

Slide 25

Slide 25 text

Time and energy: cross platform → Easiest: WebView → WebView with native bridge: custom, Ionic... → Xamarin → Kotlin Multiplatform → ReactNative → Flutter

Slide 26

Slide 26 text

Time and energy Android native

Slide 27

Slide 27 text

Stop using Eclipse

Slide 28

Slide 28 text

... and Java!

Slide 29

Slide 29 text

Kotlin → Better develop experience → Interop with existing Java → Null safety → Google working on Kotlifying APIs → Easier to do "more complex" things

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Kotlin Do not force unwrap val jorge: Person? = null jorge!!.canSing CRASH! ... also, I sing horribly

Slide 32

Slide 32 text

Kotlin Hello default paramenters! Bye Factories! class Person( val name: String, val age: Int, val canBreath: Boolean = true, val canSing: Boolean = true) ... unless you are like me

Slide 33

Slide 33 text

Kotlin Sealed classes to express more complex enums sealed class Vehicle data class Car(val brand: String): Vehicle() data class Bike(val isMountainBike: Boolean): Vehicle() object class MagicCarpet : Vehicle()

Slide 34

Slide 34 text

Kotlin: other tips → Data classes are your friends → Easy singletons with object → Synthetic extensions to avoid boilerplate

Slide 35

Slide 35 text

Android → The smaller your Activities are, the better → The smaller your Fragments are, the better → The smaller your Services, the better Remove your business logic from SDK components

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

Android → MVP, MVVM, VIPER, RIBs... → Only use libraries that make you feel comfortable → Do not overuse libraries → The smaller your APK is, the better! -> Code for everyone

Slide 38

Slide 38 text

Never stop learning

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

@jcocaramos

Slide 42

Slide 42 text

No content