MADRID · NOV 21-22 · 2014 
Opinionated Android 
Javier Gamarra 
@nhpatt
MADRID · NOV 21-22 · 2014 
¿Quién? 
Javier Gamarra / @nhpatt 
Tech Lead, @agilecyl, android/java/javascript
MADRID · NOV 21-22 · 2014 
¿Por qué? 
● Para los novatos 
● Para los cómodos 
● Por dar una opinión (IMHO)
MADRID · NOV 21-22 · 2014 
IDE 
Android Studio
MADRID · NOV 21-22 · 2014 
Build tool 
Gradle.
MADRID · NOV 21-22 · 2014 
Build tool
MADRID · NOV 21-22 · 2014 
Código 
Java bien escrito: 
Findbugs 
Checkstyle 
PMD/CPD 
Ignorad los field naming conventions del 
core de Android
MADRID · NOV 21-22 · 2014 
Código 
● Clean Code 
● SOLID
Buenas prácticas de Android 
Usad Android Lint 
MADRID · NOV 21-22 · 2014 
Huid de clases Application
MADRID · NOV 21-22 · 2014 
Arquitectura 
No es un juego de niños 
Pero hay buenas propuestas: 
● Clean Architecture 
● Arquitectura Hexagonal
MADRID · NOV 21-22 · 2014 
Y en UI 
Separad concerns! 
● MVP 
● MVP/MVVM 
Incluso podéis plantearos si usar fragments
MADRID · NOV 21-22 · 2014 
Librerías 
Hay unas pocas librerías… 
Con muchas recomendaciones... 
Pero algunas imprescindibles
Inyección de dependencias 
● Usaréis alguna librería de inyección de 
dependencias, no? 
MADRID · NOV 21-22 · 2014
MADRID · NOV 21-22 · 2014 
Inyección de dependencias 
● Roboguice 
● Dagger (+ButterKnife)
Buenas prácticas de Android 
Ignorad el título de las guías “Avoid 
dependency injection frameworks“ 
Usad Proguard (vale, hay problemas) 
MADRID · NOV 21-22 · 2014
MADRID · NOV 21-22 · 2014 
APIs REST 
● Async Tasks
MADRID · NOV 21-22 · 2014 
APIs REST 
● Volley 
● Retrofit
MADRID · NOV 21-22 · 2014 
APIs REST 
public interface GitHubService { 
@GET("/users/{user}/repos") 
List<Repo> listRepos(@Path("user") String user); 
} 
vs 
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
new Response.Listener() { 
… 
}
MADRID · NOV 21-22 · 2014 
Carga de imágenes 
● Universal Image Loader 
● Picasso
Jake Wharton! 
https://github.com/JakeWharton/u2020 
● Dagger 
● ButterKnife 
● Retrofit 
● Picasso 
● OkHttp 
● RxJava 
● Timber 
● Madge 
● Scalpel 
● Hugo 
● StaggeredGrid 
● SDK Manager Plugin 
MADRID · NOV 21-22 · 2014
MADRID · NOV 21-22 · 2014 
BD? 
● SQL 
● SQL con content providers?
MADRID · NOV 21-22 · 2014 
BD? 
● ORMLite 
● SugarORM 
● GreenDAO 
● ADAFramework 
● ActiveAndroid 
ORMLite / SugarORM
Comunicación entre servicios... 
Es un dolor comunicar información entre 
servicios, actividades, async tasks… 
MADRID · NOV 21-22 · 2014 
Bus de eventos al rescate!
MADRID · NOV 21-22 · 2014 
Comunicación 
EventBus 
Otto
MADRID · NOV 21-22 · 2014 
Comunicación 
eventBus.post(new AnyEventType(42)); 
eventBus.register(this); 
public void onEvent(AnyEventType event) {...}; 
vs 
eventBus.post(new AnyEventType(42)); 
@Subscribe public void eventAvailable(AnyEventType event) {}
Keep an eye on 
● Reactive programming en Android con 
RxJava 
MADRID · NOV 21-22 · 2014 
● Echadle un ojo
Keep an eye on 
RxJava(+[RxAndroid]) + Retrofit = Bliss 
MADRID · NOV 21-22 · 2014 
eventAPI.login(). 
flatMap(status -> api.getUserStatus()). 
subscribe(onComplete, onError); 
api.login(new Callback<ResponseBody>() { 
@Override 
public void success(...) { 
api.getUserStatus(new Callback<UserStatus>() { 
@Override 
public void success() {
MADRID · NOV 21-22 · 2014 
Testing 
TESTEAD!
MADRID · NOV 21-22 · 2014 
Testing 
Escuchad a este tío, en serio.
MADRID · NOV 21-22 · 2014 
Testing 
JUnit + 
● JMock 
● PowerMock 
● Mockito
MADRID · NOV 21-22 · 2014 
Testing 
Robolectric + 
Espresso 
Robotium/Calabash 
Appium
Testing 
Cómo siempre, echadle un ojo a Square 
● Spoon 
● AssertJ 
MADRID · NOV 21-22 · 2014 
Jenkins, plz.
MADRID · NOV 21-22 · 2014 
Pls, Android guys 
Soporte para Java 8? 
Mientras tanto tendremos que 
vivir con retrolambda
MADRID · NOV 21-22 · 2014 
Brace yourselves 
Otros lenguajes! 
● Kotlin?
MADRID · NOV 21-22 · 2014 
Madrid? 
Soy nuevo en Madrid 
Hay un meetup de Xamarin 
Dónde está nuestro meetup?
MADRID · NOV 21-22 · 2014 
Preocupate por mejorar
MADRID · NOV 21-22 · 2014 
¿Qué leer/escuchar? 
Weekly Newsletter 
Android Developers Backstage
MADRID · NOV 21-22 · 2014 
¿A quién seguir? - world 
● Jake Wharton 
● Cyril Mottier 
● Mark Murphy 
● Romain Guy 
● Reto Meier
MADRID · NOV 21-22 · 2014 
¿A quién seguir? - local 
● flipper83 
● pedro_g_s 
● akelael 
● fernando_cejas
Libros 
The Busy Coder's Guide to Android 
Development 
MADRID · NOV 21-22 · 2014
MADRID · NOV 21-22 · 2014 
Links 
● vogella 
● buenas prácticas de futurice 
● muchas charlas!
MADRID · NOV 21-22 · 2014 
Feedback 
tinyurl.com/codemotionandroid
¿Dudas o preguntas? 
MADRID · NOV 21-22 · 2014
MADRID · NOV 21-22 · 2014 
Opinionated Android 
Javier Gamarra 
@nhpatt

Opinionated android

  • 1.
    MADRID · NOV21-22 · 2014 Opinionated Android Javier Gamarra @nhpatt
  • 2.
    MADRID · NOV21-22 · 2014 ¿Quién? Javier Gamarra / @nhpatt Tech Lead, @agilecyl, android/java/javascript
  • 3.
    MADRID · NOV21-22 · 2014 ¿Por qué? ● Para los novatos ● Para los cómodos ● Por dar una opinión (IMHO)
  • 4.
    MADRID · NOV21-22 · 2014 IDE Android Studio
  • 5.
    MADRID · NOV21-22 · 2014 Build tool Gradle.
  • 6.
    MADRID · NOV21-22 · 2014 Build tool
  • 7.
    MADRID · NOV21-22 · 2014 Código Java bien escrito: Findbugs Checkstyle PMD/CPD Ignorad los field naming conventions del core de Android
  • 8.
    MADRID · NOV21-22 · 2014 Código ● Clean Code ● SOLID
  • 9.
    Buenas prácticas deAndroid Usad Android Lint MADRID · NOV 21-22 · 2014 Huid de clases Application
  • 10.
    MADRID · NOV21-22 · 2014 Arquitectura No es un juego de niños Pero hay buenas propuestas: ● Clean Architecture ● Arquitectura Hexagonal
  • 11.
    MADRID · NOV21-22 · 2014 Y en UI Separad concerns! ● MVP ● MVP/MVVM Incluso podéis plantearos si usar fragments
  • 12.
    MADRID · NOV21-22 · 2014 Librerías Hay unas pocas librerías… Con muchas recomendaciones... Pero algunas imprescindibles
  • 13.
    Inyección de dependencias ● Usaréis alguna librería de inyección de dependencias, no? MADRID · NOV 21-22 · 2014
  • 14.
    MADRID · NOV21-22 · 2014 Inyección de dependencias ● Roboguice ● Dagger (+ButterKnife)
  • 15.
    Buenas prácticas deAndroid Ignorad el título de las guías “Avoid dependency injection frameworks“ Usad Proguard (vale, hay problemas) MADRID · NOV 21-22 · 2014
  • 16.
    MADRID · NOV21-22 · 2014 APIs REST ● Async Tasks
  • 17.
    MADRID · NOV21-22 · 2014 APIs REST ● Volley ● Retrofit
  • 18.
    MADRID · NOV21-22 · 2014 APIs REST public interface GitHubService { @GET("/users/{user}/repos") List<Repo> listRepos(@Path("user") String user); } vs StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener() { … }
  • 19.
    MADRID · NOV21-22 · 2014 Carga de imágenes ● Universal Image Loader ● Picasso
  • 20.
    Jake Wharton! https://github.com/JakeWharton/u2020 ● Dagger ● ButterKnife ● Retrofit ● Picasso ● OkHttp ● RxJava ● Timber ● Madge ● Scalpel ● Hugo ● StaggeredGrid ● SDK Manager Plugin MADRID · NOV 21-22 · 2014
  • 21.
    MADRID · NOV21-22 · 2014 BD? ● SQL ● SQL con content providers?
  • 22.
    MADRID · NOV21-22 · 2014 BD? ● ORMLite ● SugarORM ● GreenDAO ● ADAFramework ● ActiveAndroid ORMLite / SugarORM
  • 23.
    Comunicación entre servicios... Es un dolor comunicar información entre servicios, actividades, async tasks… MADRID · NOV 21-22 · 2014 Bus de eventos al rescate!
  • 24.
    MADRID · NOV21-22 · 2014 Comunicación EventBus Otto
  • 25.
    MADRID · NOV21-22 · 2014 Comunicación eventBus.post(new AnyEventType(42)); eventBus.register(this); public void onEvent(AnyEventType event) {...}; vs eventBus.post(new AnyEventType(42)); @Subscribe public void eventAvailable(AnyEventType event) {}
  • 26.
    Keep an eyeon ● Reactive programming en Android con RxJava MADRID · NOV 21-22 · 2014 ● Echadle un ojo
  • 27.
    Keep an eyeon RxJava(+[RxAndroid]) + Retrofit = Bliss MADRID · NOV 21-22 · 2014 eventAPI.login(). flatMap(status -> api.getUserStatus()). subscribe(onComplete, onError); api.login(new Callback<ResponseBody>() { @Override public void success(...) { api.getUserStatus(new Callback<UserStatus>() { @Override public void success() {
  • 28.
    MADRID · NOV21-22 · 2014 Testing TESTEAD!
  • 29.
    MADRID · NOV21-22 · 2014 Testing Escuchad a este tío, en serio.
  • 30.
    MADRID · NOV21-22 · 2014 Testing JUnit + ● JMock ● PowerMock ● Mockito
  • 31.
    MADRID · NOV21-22 · 2014 Testing Robolectric + Espresso Robotium/Calabash Appium
  • 32.
    Testing Cómo siempre,echadle un ojo a Square ● Spoon ● AssertJ MADRID · NOV 21-22 · 2014 Jenkins, plz.
  • 33.
    MADRID · NOV21-22 · 2014 Pls, Android guys Soporte para Java 8? Mientras tanto tendremos que vivir con retrolambda
  • 34.
    MADRID · NOV21-22 · 2014 Brace yourselves Otros lenguajes! ● Kotlin?
  • 35.
    MADRID · NOV21-22 · 2014 Madrid? Soy nuevo en Madrid Hay un meetup de Xamarin Dónde está nuestro meetup?
  • 36.
    MADRID · NOV21-22 · 2014 Preocupate por mejorar
  • 37.
    MADRID · NOV21-22 · 2014 ¿Qué leer/escuchar? Weekly Newsletter Android Developers Backstage
  • 38.
    MADRID · NOV21-22 · 2014 ¿A quién seguir? - world ● Jake Wharton ● Cyril Mottier ● Mark Murphy ● Romain Guy ● Reto Meier
  • 39.
    MADRID · NOV21-22 · 2014 ¿A quién seguir? - local ● flipper83 ● pedro_g_s ● akelael ● fernando_cejas
  • 40.
    Libros The BusyCoder's Guide to Android Development MADRID · NOV 21-22 · 2014
  • 41.
    MADRID · NOV21-22 · 2014 Links ● vogella ● buenas prácticas de futurice ● muchas charlas!
  • 42.
    MADRID · NOV21-22 · 2014 Feedback tinyurl.com/codemotionandroid
  • 43.
    ¿Dudas o preguntas? MADRID · NOV 21-22 · 2014
  • 44.
    MADRID · NOV21-22 · 2014 Opinionated Android Javier Gamarra @nhpatt