Aquí está mi lista de frustraciones:
Fragmentación
Sí, como todos mencionaron, es realmente molesto que no pueda orientar su aplicación a las últimas versiones de Android, sino que tenga que apegarse a las más antiguas. Usted sabe sobre el diseño de materiales y los permisos en la aplicación, etc. y sus dedos están ansiosos por usar esas funciones en su aplicación, pero no puede porque hay un pequeño problema de que la mayoría de los dispositivos Android todavía ejecutan Ice Cream Sandwich.
Los teléfonos iOS y Windows son superiores en este aspecto ya que la mayoría de sus dispositivos son elegibles para las últimas actualizaciones y las que no lo son, no importa en absoluto.
Controladores ADB
Esa es una frecuente. Es realmente molesto cuando compra un nuevo dispositivo y su sistema de desarrollo no lo reconoce. He probado Samsung, LG, Motorola, HTC, Micromax y todo tipo de dispositivos. Ninguno de ellos funciona correctamente con ADB a través de una conexión USB. Tengo que instalar trajes de PC de diferentes fabricantes para tener la oportunidad de hacerlo funcionar. Algunas veces funciona en un cable USB en particular y otras solo en un puerto USB en particular. Principalmente uso Wireless ADB por este motivo, lamentablemente requiere un teléfono rooteado.
Los controladores de Nokia y Apple son fáciles de instalar en Windows, OSX e incluso en Ubuntu. ¿Qué tan difícil es hacer que funcionen también para Android?
Bibliotecas de soporte
En muchos casos, las bibliotecas de soporte y AppCompat Library funcionaron como un salvador cuando se desea que una característica sea respaldada. Pero a veces es un dolor usarlo. Debe recordar utilizar los Fragmentos de soporte y los Administradores de fragmentos de soporte. Cada actividad debe ampliarse desde ActionBarActivity y no mencionar incompatibilidad con los objetos que no son compatibles. El momento más frustrante es cuando la biblioteca de soporte se usa en una biblioteca que también desea usar. Se requiere mucha magia de Gradle para arreglar eso.
iOS y Windows Phone no los necesitan en absoluto.
Gradle
Es mejor que ANT, pero a veces también es un dolor. Nunca antes había trabajado con Gradle y todavía soy reacio a aprender un nuevo sistema de compilación. No sentirá la complejidad cuando solo tenga una aplicación estática simple. Pruebe bibliotecas con clases no refactorizadas en conflicto y sabrá lo difícil que es el desarrollo de Android. Afortunadamente tenemos a JarJar.
(“¿Meesa?” “¡No eres una criatura horrible!”)
No necesita acceder al sistema de compilación de iOS o Windows Phone directamente, ya que se administra automáticamente por usted. Ambos tienen su parte de bibliotecas en conflicto, pero es fácil arreglarlas que en Android.
RunTime
Android es lento Lento porque depende demasiado del tiempo de ejecución subyacente (DalvikVM anteriormente y ART ahora). Incluso después de JIT y ART, es más lento que iOS e incluso Windows Phone. Cuando desarrollas juegos que requieren muchas llamadas, Android no funciona bien. Sin mencionar que también tenemos que admitir dispositivos de gama baja. A veces me doy por vencido y lanzo la compilación incluso si estoy seguro de que no se ejecutará en dispositivos de gama baja (“No vamos a obtener ningún ingreso de ellos”, es siempre mi argumento), pero me lastimo en silencio por no dando acceso a mi increíble juego.
Windows e iOS son rápidos debido a las aplicaciones nativas y al estricto control sobre sus procesos de fabricación. (Más detalles: ¿Por qué es ART mejor que Dalvik?)
DP, SP, DIMEN
Son difíciles de dominar. Me llevó mucho tiempo entender cómo funcionaba esto. En comparación, entendí CSS más rápido de lo que entendí la interfaz de usuario de Android. Todavía me quedo atascado en las interfaces de usuario de Android. Los tamaños de fuente son aún peores.
Windows tiene un sistema de interfaz de usuario similar en XAML, pero no usan DP o SP. Sin embargo, tienen algo similar a las monedas de diez centavos en las plantillas. iOS tiene un generador de interfaz.
Pesas
Las pesas no son frustrantes en absoluto. Me gusta dar peso a los diseños, porque a veces es la mejor opción disponible para diseñar una interfaz de usuario de una manera particular. La parte frustrante es que cuesta muchas llamadas. Los pesos anidados degradan mucho el rendimiento, pero a veces hay que morder la bala. Esa es mi arma contra la mayoría de los problemas de tamaño de pantalla.
La interfaz de usuario de iOS es mucho más fácil de solucionar debido al generador de interfaces y a los guiones gráficos. No puedo decir lo mismo sobre el sistema XAML de Windows Phone. A veces también me pone nervioso.
Fabricantes
Cada fabricante es diferente el uno del otro. Dan diferentes características de hardware en diferentes dispositivos. Samsung da un problema en la cámara, mientras que HTC da un problema en el micrófono. A veces tienes acceso al flash de la cámara, a veces no. Los sensores de proximidad no se alinean cuando los necesita para cálculos altamente sensibles. Algunos de ellos admiten la grabación de llamadas, otros no (Funcionó para mí solo en HTC). Entonces, la mayoría de los fabricantes no le permiten obtener acceso a los búferes de cámara sin procesar cuando se transmite. Incluso Windows Phone es mejor en eso.
Los iPhones tienen un solo fabricante y, por lo tanto, este tipo de problemas son raros.
Java
No odio Java, pero si me dan una opción, me encantaría trabajar en C #. Sé de Xamarin, pero eso no se siente igual. Android ni siquiera permite que ningún otro idioma funcione de forma nativa. Windows Phone tiene C #, VB, C ++ e incluso JavaScript. Todos pueden hacer una aplicación nativa. Incluso iOS tiene Swift como idioma secundario. Pero Android depende demasiado de Java. Ni siquiera me sugieras NDK. Es difícil trabajar con él y requiere un conocimiento de JNI. También requiere la resistencia para soportar la frustración de depurar el código C ++ escrito para NDK. Alguien gritó “Pruebas unitarias” desde atrás.
El desarrollo de Android es fácil de aprender, pero es realmente difícil de dominar. Pero a pesar de toda la frustración, todavía amo la plataforma y aún amo lo que están tratando de hacer. No puedo agradecer lo suficiente a esta plataforma como para enseñarme muchas cosas, principalmente debido a los puntos que mencioné anteriormente.
¿Te gustó mi respuesta? Siga mi blog sobre programación para leer más en Learn Programming.
¿Quieres saber más sobre mí y el trabajo que hago? Sígueme en Noob Corner
También puedes seguirme en Abhi (@ abhi347) | Gorjeo