Descripción
El libro que tiene en las manos es una guía para aquellos programadores de Android que, teniendo nociones básicas, quieran profundizar en algunos aspectos de especial interés.
Diseño avanzado del interfaz de usuario: Aprenda las novedades incorporadas en las últimas versiones de Android, como Material Dessign, Fragments, ActionBar, Navigation Drawer, animación de propiedades,… Personalice sus propias vistas y cree Widgets de escritorio. Firebase: Domine la nueva plataforma de Google que incluye una amplia variedad de servicios en la nube: autentificación basada en correo o en redes sociales, bases de datos en tiempo real noSQL, almacenamiento en la nube, hosting, Cloud Messaging y notificaciones Push. Aplicaciones Web: Aprenda a integrar una aplicación basada en HTML5, CSS3 y JavaScript dentro de Android. Conozca las alternativas a la programación multiplataforma para móviles. Programación en código nativo: Use NDK para escribir directamente tus algoritmos en C/C++ y compílalos a código nativo del procesador. Redes sociales: Integre Facebook y Twitter en tus aplicaciones. Ingeniería inversa: Aprenda a jaquear aplicaciones para evitar que lo hagan con las suyas. Estudie el código y modifica aplicaciones de terceros. Ofusca el código e incluye licencias de Google Play para evitar usos no autorizados de su aplicación.
El libro propone un aprendizaje activo, con actividades, muchas a través de Internet:
Vídeo[Tutorial]: Videos elaborados por los autores.
Ejercicio paso a paso: La mejor forma de aprender es practicando.
Práctica: Para afianzar lo aprendido hay que practicar.
Recursos adicionales: Localiza rápidamente la información clave.
Preguntas de repaso y reflexión: ¿Lo has entendido todo correctamente?
Índice
Lista de acrónimos .................................................................................. xv
¿Cómo leer este libro? ............................................................................ xvii
Capítulo 1. Diseño avanzado de interfaces de usuario ........... 19
1.1 Acceder a objetos globales de la aplicación ........................................ 21
1.1.1 La clase Application .......................................................................... 21
1.2 Material Design ................................................................................... 25
1.2.1 Definición de la paleta de colores de la aplicación .......................... 27
1.3 RecyclerView ....................................................................................... 29
1.4 Fragments ........................................................................................... 36
1.4.1 Insertar fragments desde XML ........................................................ 38
1.4.2 Insertar fragments desde código ...................................................... 45
1.4.3 Comunicación e intercambio de fragments ...................................... 48
1.5 Otros elementos del interfaz de usuario .............................................. 49
1.5.1 Menús contextuales ........................................................................... 49
1.5.2 La barra de acciones (ActionBar / Toolbar ) .................................... 52
1.5.3 Vistas animadas : CoordinationLayout, AppBarLayout, FloatingActionButton y SnackBar ..... 58
1.5.4 Pestañas con TabLayout ..................................................................... 66
1.6 Navigation Drawer ................................................................................ 71
1.6.1 Ocultar elementos de la interfaz de usuario ....................................... 77
1.7 Servicios de búsquedas ........................................................................... 82
1.7.1 Añadiendo preferencias con PreferenceFragment .............................. 85
1.8 Animaciones ........................................................................................... 89
1.8.1 Animanones de vistas : transiciones entre actividades ..................... 90
1.8.1.1 Aplicando animaciones de vistas en Audiolibros ........................... 93
1.8.2 Animaciones de propiedades ............................................................. 95
1.8.2.1 El motor básico de animación : ValueAnimator ............................. 96
1.8.2.2 Automatizando las animaciones : ObjetcAnimator ....................... 98
1.8.2.3 Combinando animaciones : AnnimatorSet ....................................99
1.8.2.4 Definiendo animaciones en XML ................................................... 100
1.8.2.5 Nuevas propiedades de la clase View .............................................. 102
1.8.2.6 Aplicando animaciones de propiedades en Audiolibros ................. 105
1.8.3 Animaciones en RecyclerView ........................................................... 107
1.9 Otros aspectos introducidos en la versión 5.0 ...................................... 109
1.9.1 Extraer paleta de colores desde imágenes ......................................... 109
1.9.2 Uso de gráficos vectoriales ............................................................... 111
Capítulo 2. Diseño personalizado de vistas .............................. 117
2.1 Algunos conceptos básicos .................................................................. 118
2.2 Una vista como la composición de varias vistas ................................. 120
2.2.1 Creación de escuchadores de eventos ................................................. 123
2.3 Modificiación de vistas existentes ........................................................ 126
2.3.1 Algo más de información sobre TextView ........................................... 129
2.4 Creación de nuevos atributos XML ....................................................... 131
2.5 Una vista creada desde creo ................................................................... 135
2.5.1. Diseño y dibujo de la vista ................................................................. 135
2.6 Creación de widgets de escritorio ......................................................... 146
2.6.1. Pasos a seguir para crear un widget .................................................. 147
2.6.1.1. Definir las características del widget ...................................... 147
2.6.1.2. Diseñar el layout del widget ................................................... 148
2.6.1.3. Crear una clase descendiente de AppWidgetProvider ........... 149
2.6.1.4. Declarar el widget en AndroidManifest .................................. 149
2.6.1.5. Crear una actividad para configurarlo .................................... 150
2.6.2. Creación de un widget de escritorio sencillo .................................... 150
2.6.3. Actualizando el widget de escritorio ................................................. 153
2.6.4. Actuando ante el evento onClick ....................................................... 155
2.6.5. Añadiendo una actividad de configuración ....................................... 157
2.7 Notificaciones con Widgets personalizados .......................................... 159
Capítulo 3 . Arquitecturas de software ....................................... 165
3.1 S.T.U.P.I.D ............................................................................................... 166
3.1.1 Singleton Invasion .................................................................................. 166
3.1.2 Tight coupling ......................................................................................... 167
3.1.3 Untestability ........................................................................................... 167
3.1.4 Premature Optimization .......................................................................... 168
3.1.5 Indescriptive Naming ............................................................................... 168
3.1.6 Duplication ............................................................................................... 168
3.2 Los principiso S.O.L.I.D ............................................................................... 170
3.2.1. Single Responsibility Principle ........................................................... 171
3.2.2. Open/Closed principle ....................................................................... 172
3.2.3. Liskov substitution principle .............................................................. 173
3.2.4. Interface segregation principle ......................................................... 173
3.2.5. Dependency inversion principle ........................................................ 174
3.3 Patrones de diseño comunes .................................................................. 174
3.3.1. El patrón Observer............................................................................. 175
3.3.2. El patrón Null Object ......................................................................... 176
3.3.3. El patrón Command ........................................................................... 177
3.3.4. El patrón Adapter .............................................................................. 179
3.3.5. El patrón Decorator ........................................................................... 180
3.3.6. El patrón Builder ................................................................................ 180
3.3.7. El patrón Singleton ............................................................................ 182
3.4 Patrones de arquitectura ........................................................................ 186
3.4.1. Model View Controller ...................................................................... 186
3.4.2. Model View Presenter ....................................................................... 188
3.4.3. Modelo View View-Model ................................................................. 191
3.5 Arquitectura CLEAN .............................................................................. 191
3.5.1. Reglas de dependencias ..................................................................... 192
3.5.2. Interface Adapters .............................................................................. 193
3.5.3. Capas ................................................................................................... 193
3.5.3.1. Capa de presentación .............................................................. 193
3.5.3.2. Casos de uso y capa de dominio .............................................. 194
3.5.3.3. Capa de datos .......................................................................... 196
CAPÍTULO 4. Firebase: Autentificación y bases de datos .................. 199
4.1 Introducción a Firebase ......................................................................... 200
4.1.1. Los servicios de Firebase ................................................................... 201
4.1.2. Agregar Firebase en un proyecto ...................................................... 204
4.2 Autentificación con Firebase ................................................................ 208
4.2.1 Autentificación con FirebaseUI .......................................................... 209
4.2.2 Autentificación personalizada ............................................................ 221
4.3 Bases de datos en tiempo real ............................................................... 231
4.3.1. Cómo almacenar datos con Firebase ................................................ 232
4.3.2. Operaciones básicas para trabajar con bases de datos .................... 236
4.3.3. Trabajando con FirebaseUI ................................................................ 239
4.3.4. Trabajando con Firebase SDK ............................................................ 248
CAPÍTULO 5. Servicios en la nube............................................... 255
5.1 Notificaciones push ..................................................................................... 256
5.1.1 Firebase Cloud Messaging ........................................................................ 257
5.1.2 Firebase Messaging en Android ............................................................... 259
5.1.3 Aplicaciones cliente Firebase Cloud Messaging ....................................... 271
5.1.3.1 Administración de mensajes FCM en Android ....................................... 272
5.1.3.2 Administración de identificadores FCM en Android .............................. 277
5.1.3.3 Suscripción a temas .................................................................................. 282
5.1.3.4 Personalización .......................................................................................... 291
5.1.4 Aplicación servidor Firebase Cloud Messanging ......................................... 296
5.1.4.1. Servidor: Firebase Notifications .............................................. 296
5.1.4.2. Servidor: Propio ...................................................................... 299
5.2 Almacenamiento en la nube ........................................................................... 304
5.2.1. Firebase Storage ................................................................................ 305
5.2.1.1. Referencias .............................................................................. 306
5.2.1.2. Subir archivos .......................................................................... 308
5.2.1.3. Descargar archivos .................................................................. 316
5.2.1.4. Metadatos de archivos ............................................................ 318
5.2.1.5. Eliminar archivos ..................................................................... 319
5.2.2. Almacenamiento en Google Drive ..................................................... 320
5.2.3. Google Drive API ................................................................................ 321
5.2.4. Crear una aplicación Android para Google Drive .............................. 322
5.2.4.1. Habilitar el servicio Google Drive API...................................... 322
5.2.4.2. Autorizar el acceso a Google Drive ......................................... 323
5.2.4.3. Subir ficheros a Google Drive .................................................. 330
5.2.4.4. Listar ficheros de Google Drive ............................................... 338
5.3 Servicio de Backup de Google ............................................................... 341
5.3.1 Fundamentos ........................................................................................ 342
5.3.2 Auto Backup for Apps ........................................................................... 343
CAPÍTULO 6. Aplicaciones web en Android .............................. 347
6.1 Introducción a la tecnología web ................................................................ 348
6.1.1. Aplicación web .................................................................................. 349
6.1.2. Aplicación web online y offline .......................................................... 352
6.1.2.1. Aplicación online: Firebase Hosting ......................................... 352
6.1.2.2. Aplicación offline ..................................................................... 359
6.2 Uso de WebView ............................................................................... 360
6.2.1 Mostrar contenido web usando una intención .............................. 361
6.2.2 Uso de un WebView para mostrar contenido web .......................... 362
6.2.3 Aspectos básicos de un WebView ........................................................364
6.2.3.1. Evitar el reinicio de la actividad .............................................. 364
6.2.3.2. Abrir los enlaces en el WebView ............................................. 365
6.2.3.3. Opciones de inicio ................................................................... 365
6.2.3.4. Barra de progreso ................................................................... 366
6.2.3.5. Navegación .............................................................................. 368
6.2.3.6. Controlar el botón «Volver» ................................................... 370
6.2.3.7. Capturar alertas JavaScript ..................................................... 371
6.2.3.8. Gestión de errores .................................................................. 371
6.2.3.9. Descargas ................................................................................ 372
6.2.3.10. Conectividad .......................................................................... 375
6.3 Diseño web en Android .................................................................. 377
6.3.1. Área de visualización y escalado ....................................................... 378
6.3.2. Escalado ............................................................................................. 380
6.3.3. Densidad de pantalla del dispositivo ................................................. 381
6.3.4. Depuración remota en Android con Chrome .................................... 383
6.4 Aplicaciones hibridas ............................................................................. 384
6.5 Configuración remota con Firebase ....................................................... 387
6.6 Alternativas en la progrmación independiente de la plataforma para móviles ....... 395
6.6.1. Jquery Mobile .................................................................................... 395
6.6.1.1. Crear una página básica .......................................................... 396
6.6.1.2. Añadir contenido ..................................................................... 400
6.6.1.3. Crear una lista ......................................................................... 400
6.6.1.4. Añadir un deslizador ............................................................... 404
6.6.1.5. Crear un botón ........................................................................ 404
6.6.1.6. Temas ...................................................................................... 404
6.7 Enlaces dinámicos .......................................................................... 408
6.7.1. Dynamic Links .................................................................................... 408
6.7.2. Firebase Invites .................................................................................. 415
CAPÍTULO 7. Programación en código nativo ............................. 421
7.1 Android NDK ............................................................................................. 422
7.1.1. Cuándo utilizar código nativo ............................................................ 423
7.1.2. Contenido de Android NDK ............................................................... 425
7.1.2.1. Las herramientas de desarrollo............................................... 425
7.1.2.2. Documentación ....................................................................... 426
7.1.2.3. Aplicaciones de ejemplo ......................................................... 426
7.2 Instalación de Android NDK ......................................................... 427
7.2.1. Instalación Android NDK en Android Studio 2.2 o superior .............. 428
7.2.2. Instalación Android NDK en Android Studio 2.1 o inferior................ 429
7.2.3. Un primer ejemplo con Android NDK ................................................ 431
7.3 Funcionamiento y estructura de Android NDK ...................................... 435
7.3.1. Desarrollo práctico de Android NDK con CMake .............................. 436
7.3.1.1. Situación del código nativo ..................................................... 438
7.3.1.2. La herramienta CMake ............................................................ 438
7.3.1.3. Fichero cMakeLists.txt ............................................................ 440
7.3.1.4. Fichero build.gradle ................................................................ 444
7.3.1.5. Compilar y ejecutar una app con código nativa ...................... 446
7.3.2. Desarrollo práctico de Android NDK con ndk-build .......................... 447
7.3.2.1. Situación del código fuente nativo ......................................... 448
7.3.2.2. La herramienta ndk-build ........................................................ 448
7.3.2.3. Fichero Android.mk ................................................................. 449
7.3.2.4. Fichero Application.mk (opcional) .......................................... 451
7.3.2.5. Fichero build.gradle ................................................................ 453
7.3.2.6. Compilar y ejecutar una app con código nativa ...................... 454
7.4 Interfaz entre JAVA y C/C++ (JNI) ................................................ 459
7.4.1. Bibliotecas de enlace estático y dinámico ......................................... 459
7.4.2. Tipos fundamentales, referencias y arrays ....................................... 460
7.4.3. Desarrollo paso a paso de un programa mediante JNI (I) ................. 462
7.4.3.1. Declaración del método nativo y creación del archivo
Android.mk ............................................................................. 463
7.4.3.2. Creación del fichero de cabecera nativo ................................. 464
xiii
7.4.3.3. Implementación del método nativo ....................................... 465
7.4.3.4. Compilación del fichero nativo ............................................... 466
7.4.3.5. Ejecución de la aplicación ....................................................... 466
7.4.4. Acceso a métodos Java desde código nativo (JNI callback) ................. 467
7.4.4.1. Métodos de instancia .............................................................. 467
7.4.4.2. Métodos de clase .................................................................... 468
7.4.4.3. Invocar constructores ............................................................. 468
7.4.5. Excepciones ....................................................................................... 473
7.5 Rendimiento de aplicaciones con código nativo ..................................... 474
7.6 Procesado de imagen con código nativo ................................................. 479
CAPÍTULO 8. Redes sociales: Facebook y Twitter ............................ 485
8.1 Android y Facebook ....................................................................................... 486
8.1.1 Preliminares ............................................................................................... 486
8.1.1.1 Darse de alta en Facebook como desarrollador ..................................... 486
8.1.1.2. Aplicación oficial de Facebook para Android .......................... 487
8.1.1.3. SDK de Facebook para Android ............................................... 488
8.1.1.4. Ejemplos básicos de Facebook SDK ........................................ 488
8.1.1.5. Configurando nuestra nueva aplicación (en Facebook
Developers) ............................................................................. 490
8.1.1.6. Algunas consideraciones “Sandbox mode”,
“aproved items” ...................................................................... 495
8.1.2. Nuestro proyecto Android ................................................................. 499
8.1.2.1. Importando la biblioteca Facebook-Android-SDK
en Android Studio ................................................................... 499
8.1.2.2. Configurando nuestra aplicación(en Facebook) ..................... 500
8.1.2.3. Configurando el código de nuestra aplicación ........................ 500
8.1.3. Aplicación de ejemplo (usando API Graph) ....................................... 501
8.1.4. Aplicación de ejemplo (Share Dialog) ................................................ 5118.1.1.2. Aplicación oficial de Facebook para Android .......................... 487
8.1.1.3. SDK de Facebook para Android ............................................... 488
8.1.1.4. Ejemplos básicos de Facebook SDK ........................................ 488
8.1.1.5. Configurando nuestra nueva aplicación (en Facebook
Developers) ............................................................................. 490
8.1.1.6. Algunas consideraciones “Sandbox mode”,
“aproved items” ...................................................................... 495
8.1.2. Nuestro proyecto Android ................................................................. 499
8.1.2.1. Importando la biblioteca Facebook-Android-SDK
en Android Studio ................................................................... 499
8.1.2.2. Configurando nuestra aplicación(en Facebook) ..................... 500
8.1.2.3. Configurando el código de nuestra aplicación ........................ 500
8.1.3. Aplicación de ejemplo (usando API Graph) ....................................... 501
8.1.4. Aplicación de ejemplo (Share Dialog) ................................................ 511
8.2 Android y Twitter ................................................................................... 516
8.2.1. Instalando Fabric en Android Studio ................................................. 517
8.2.2. Configurando nuestra aplicación en Twitter Developers .................. 519
8.2.3. Configurando Fabric en nuestra aplicación de Android Studio ......... 521
8.2.4. Aplicación de ejemplo ....................................................................... 524
CAPÍTULO 9. Ingeniería inversa en Android ................................ 529
9.1 El formato APK .............................................................................................. 530
9.2 Decompilando aplicaciones Android ............................................................. 535
9.2.1. La máquina virtual Dalvik/ART .......................................................... 535
9.2.2. Decompilando aplicaciones Android ................................................. 537
9.3 Modificando aplicaciones Android ......................................................... 540
9.3.1. Modificando recursos binarios de una aplicación ............................. 540
9.3.2. Modificando recursos XML de una aplicación ................................... 543
9.3.3. Modificando el código de una aplicación .......................................... 544
9.4 Ofuscación del código ............................................................................. 548
9.5 Obtención de licencias con Google Play .................................................. 552
9.5.1. Cómo funciona el servicio de licencias .............................................. 553
9.5.2. Como añadir una licencia a nuestra aplicación ................................. 554
9.5.3. ¿Qué es una política de licencia? ...................................................... 561
9.6 Cómo evitar que se elimine la verificación de licencia en nuestras aplicaciones ......... 562
9.6.1. Ingeniería inversa en una aplicación con licencia ............................. 562
9.6.2. Primera contramedida: ofuscar el código ......................................... 567
9.6.3. Segunda contramedida: no usar la librería LVL estándar .................. 570
9.6.4. Tercera contramedida: verificar que no ha modificado nuestra APK ......... 573