Académique Documents
Professionnel Documents
Culture Documents
Rayco Araña
rayco.arana@gmail.com
Instituto SIANI
Preparándonos para publicar
Mercado
Optimización
Buenas prácticas
Prueba, prueba y prueba
Android Market
Preparándonos para publicar
Mercado
Optimización
Buenas prácticas
Prueba, prueba y prueba
Android Market
Fragmentación del mercado
La gran amenaza para Android
▪ Varios teléfonos recientes salen con versión 1.5!
▪ Todos los iPhone tienen acceso a la última versión
Fragmentación del mercado
Consecuencia
▪ Debemos desarrollar nuestras aplicaciones
compatibles con varias versiones del SDK
Estrategia
▪ android:minSdkVersion con valor 3 (v1.5)
▪ Permite su ejecución desde 1.5 en adelante
▪ android:targetSdkVersion a la última versión
▪ Nos permite usar las nuevas APIs
▪ android:maxSdkVersion
▪ Limitar hasta probar puede evitar malas valoraciones
Fragmentación del mercado
Estrategia
▪ Adaptar la aplicación en función de la versión
▪ Los recursos soportan la versión del SDK como
discriminante
▪ Soportar distintos tamaños de pantalla
▪ Las nuevas versiones introducen nuevas dimensiones y
relaciones de aspecto
▪ Crear distintas configuraciones de AVDs
▪ Versiones 1.5 y última como mínimo
▪ Distintas configuraciones de tamaños y densidades de
pantallas
Limitaciones del móvil
Pocos recursos
Pantalla pequeña
Energía limitada
Las aplicaciones móviles deben ser eficientes
▪ +Rápido == --CPU == +++Batería
▪ Debemos optimizar nuestras aplicaciones
ANR (Android Not Responding)
Nuestro gran enemigo!
Se lanza si nuestra aplicación no
atiende a un evento
▪ 5 sec. para input del usuario
▪ 10 sec. para BroadcastReceiver
El usuario puede esperar o forzar
el cierre
ANR (Android Not Responding)
Tips and Tricks
▪ Evita hacer cosas pesadas en el main-thread
▪ Los manejadores de eventos y del ciclo de vida de las
actividades deben ser lo más pequeños y óptimos posibles
▪ Usa hilos para hacer las tareas pesadas
▪ No bloquees el hilo principal en espera de un hilo hijo
▪ Usa un Handler para que el hilo hijo notifique al main-
thread
▪ En el caso de BroadcastReceiver, no usar hilos sino lanzar
un servicio para tareas pesadas
Optimizando nuestra aplicación
Los extremos son siempre malos
▪ Una mala API por tener rendimiento nos puede
pasar factura en el mantenimiento
Herramientas de Profiling
▪ Nos pueden dar pistas sobre donde necesitamos
mejorar
▪ Se cumple la regla del 80/20
▪ 80% del tiempo de ejecución es solo el 20% del código
▪ Un cambio de algoritmo suele tener mayor impacto que
muchas optimizaciones de bajo nivel
Optimizando nuestra aplicación
Evita crear/destruir objetos
▪ Evita objetos temporales
▪ Especialmente en bucles o UI
▪ Contribuye a menos recolecciones de basura
▪ Una recolección puede causar un «parón» momentáneo de
la aplicación
▪ Especialmente crítico en juegos
▪ ¡Ojo! El método draw es un bucle implícito
Optimizando nuestra aplicación
Usa métodos nativos
▪ Usa la API del sistema siempre que puedas
▪ Los métodos pueden estar implementados en
C/C++
▪ String.indexOf() - Entre 10-100x más rápido que en Java
▪ No para operaciones muy pequeñas
▪ La llamada a código nativo es más costosa que a
interpretado
Optimizando nuestra aplicación
Virtual sobre Interface
▪ Llamadas a través de una interfaz son hasta 2x más costosas
▪ Ej. Uso de Map para referenciar a un HashMap
▪ Desventaja, código menos flexible al mantenerlo
▪ Solucionable con un buen IDE Refactorizar
Optimizando nuestra aplicación
Static over Virtual
▪ Más rápido al no requerir indirección
▪ Si el método no accede a campos internos del objeto, hacerlo
estático
▪ Es una buena práctica, ya que indica que ese método no altera el
estado del objeto
Optimizando nuestra aplicación
Evita el uso interno de getters y setters
▪ Dentro de la misma clase, accede directamente al campo
▪ Desde fuera NO!
▪ Evitamos llamadas a metodos virtuales innecesarias
Optimizando nuestra aplicación
Cachea la búsqueda de campos
▪ El acceso a un campo miembro de una clase es más lento que
el acceso a una variable local
▪ Los parámetros tienen igual rendimiento que una local
Android Market
• La tienda de aplicaciones
en Android
• Forma cómoda de
gestionar aplicaciones
• Nuevas posibilidades
para el desarrollador
independiente
• Muestra icono,
descripción y
screenshots de la
aplicación
Características
Apertura
▪ No está cerrado, cualquiera puede apuntarse (no es gratis)
Sencillez
▪ Sólo 3 pasos: Registro, subida y publicación
Comunidad
▪ Los usuarios pueden puntuar y comentar las aplicaciones
Preferencia
▪ Puedes distribuirlas tanto gratuitas como de pago
Administración
▪ Estadísticas de descargas, puntuaciones y comentarios
¿Qué necesito para poder publicar
aplicaciones?
▪ Residir en alguno de los países soportados
▪ Cuota de inscripción única de $25
▪ AppStore $99/año
▪ Encontrarse en alguno de los siguientes países
▪ Australia, Austria, República Checa, Francia, Alemania, Italia,
Países bajos, Polonia, Singapur, España, Reino Unido,
Estados Unidos
▪ Cumplir la política de contenido
▪ Cumplir las leyes de exportación de EEUU
Si queremos además vender aplicaciones
Registrarse como comerciante de Google Checkout
(Gratuito)
Encontrarse en alguno de los siguientes países
▪ Austria, Francia, Alemania, Italia, España, Reino Unido, Países
bajos, Estados Unidos.
Tarifas
70% para ti, 30% para Google
▪ Si pones una aplicación a 1.00 €, te ingresarán 0.70 € en tu
cuenta
▪ Tu controlas los reembolsos a los clientes (pueden ser
parciales)
▪ Máximo 24 horas después de la compra
▪ En la AppStore son 90 días
▪ En caso de reembolso, Google también devuelve su parte
▪ En la AppStore, el desarrollador devuelve el 100% (en teoría, te puedes
arruinar)
Aplicaciones que se pueden ver en el Market
Gratuitas
De pago
Gratuita + Publicidad
▪ Varias plataformas publicitarias
▪ Ej. AdMob (Comprada por Google recientemente)
▪ Capaces de funcionar off-line
Gratuita limitada y completa de pago
▪ Conocidas como versiones Lite
▪ Buena forma de promoción/prueba
Android Market
Mejorable…
▪ No tiene códigos promocionales
▪ Interesante para entregar a medios, regalar, hacer sorteos,
etc.
▪ Falta una plataforma fuera de Android
▪ Poder buscar/comprar/descargar aplicaciones desde el PC
▪ Aplicación Market muy mejorable
▪ Escaparate de promoción
▪ Más descargadas del mes, semana, día…
▪ Integración con YouTube
Versionado
En el fichero de manifiesto de la aplicación
▪ android:versionCode
▪ Número entero, debe incrementarse con cada nueva versión
▪ Será el usado por otras aplicaciones para determinar si se trata de una
versión más o menos nueva (Ej. Market)
▪ android:versionName
▪ Tipicamente <major>.<minor>.<point>
▪ Es usada para mostrarse al usuario
▪ No tiene porque tener ese formato
Firma
Necesario para poder instalar el apk en Android
Clave pública y privada puede ser auto-firmada por
nosotros
No uses la clave con la que publicas en desarrollo!
▪ Eclipse y Ant soportan dos modos de compilación
▪ Debug Gestiona automaticamente las claves generadas para tal
proposito
▪ Release Usa la nuestra, teniendo que proporcionar el password si es
necesario
Android Market
Developer Console
Publicación de aplicaciones
Android Developer Reference
▪ http://developer.android.com/guide/practices/screens_support.html
▪ http://developer.android.com/guide/practices/design/performance.html
▪ http://developer.android.com/guide/practices/design/responsiveness.html
▪ http://developer.android.com/guide/practices/design/seamlessness.html
▪ http://developer.android.com/guide/publishing/app-signing.html
▪ http://developer.android.com/guide/publishing/versioning.html
▪ http://developer.android.com/guide/publishing/preparing.html
▪ http://developer.android.com/guide/publishing/publishing.html