¿Es una buena idea utilizar la biblioteca Google Guava para el desarrollo de Android?

122

Participo en el desarrollo de la aplicación de Android, que es un cliente móvil bastante "grueso" para un servicio web. Se comunica mucho con el servidor, pero también tiene mucha lógica interna. Entonces, decidí usar algunas características de la Google Guavabiblioteca para simplificar el proceso de desarrollo. Aquí hay una lista de características en las que estoy muy interesado: colecciones inmutables, utilidades base, extensiones de colección, programación de azúcar funcional y expresiones idiomáticas ( common.collecty common.base), utilidades primitivas ( common.primitives), utilidades hash ( common.hash), utilidades concurrentes (futuros y AsyncFunction). Cosas que no quiero usar en Android: common.cache(vea la pregunta a continuación), common.eventbus(tenemos mejores bibliotecas específicas de Android para esto, como Otto ), common.io(podemos usar okio para Android ahora).

Leí que usar Guava para Android puede ralentizar significativamente el proceso de compilación y también disminuir el rendimiento total del tiempo de ejecución: Mal rendimiento con Guava Cache en Android (en este caso es razonable y no es necesario usar el caché de Guava para Android) y Agregar Google Proyecto de Guayaba a Android: ralentiza significativamente la compilación

Entonces, ¿es eficiente usar la biblioteca Guava en un proyecto de Android o esta biblioteca está diseñada para usarse solo para el desarrollo del lado del servidor, y debo elegir soluciones estándar? Cualquier explicación será muy apreciada.

Oleksandr Karaberov
fuente
2
" Pero escuché que [...] " ¿cuáles son sus fuentes?
jlordo
3
@jlordo Ok, mira mis ediciones
Oleksandr Karaberov
2
Es seguro de usar, pero por supuesto: debe verificar para cada clase de la biblioteca si se ajusta a sus necesidades. Guava Cache se implementó para el lado del servidor (que está escrito de manera propagable en los documentos), así que no lo use en Android. El tiempo de construcción generalmente no es realmente un problema, el tiempo de ejecución es más importante.
John Smith
44
appbrain.com/stats/libraries/details/guava/google-guava indica que Guava se usa en muchas aplicaciones de Android.
Louis Wasserman
3
Es una pena que no se puedan publicar nuevas respuestas (por mi parte, voté por la reapertura). Hay algunos problemas reales e interesantes, por ejemplo, relacionados con el límite del método de 65k que merecen atención.
Jonik

Respuestas:

117

(Demasiado grande para comentar, así que publico una respuesta). Personalmente, uso toda la biblioteca Guava en cada proyecto Java y cuando no tengo problemas de rendimiento significativos y con un perfil adecuado . Si tiene, por ejemplo, problemas de memoria como en el entorno de Android, puede usar ProGuard para obtener solo las partes de Guava que realmente necesita.

Además, hay muchas aplicaciones de Android que usan Guava , no solo las pequeñas, es decir, Google Search y Youtube, que provienen directamente de Google.

(También debería ver la nota de compatibilidad ).

Xaerxess
fuente
105
Tenía curiosidad sobre el tamaño de guayaba y APK . Pruebas simples revelaron lo siguiente: "Hola mundo" y no mucho más (depuración): 27 KB ; "Hola mundo" con dependencia de Guava (15.0) y uso menor de guayaba (depuración): 705KB ; lo mismo, lanzamiento de compilación, optimizado con ProGuard: 22 KB . Esta prueba, junto con haber usado Guava mientras desarrollaba una gran aplicación del mundo real, ¡confirmó mi creencia de que Guava también está totalmente bien en Android!
Jonik
2
Además, si tiene problemas para hacer que ProGuard funcione con la dependencia de Guava, vea esta respuesta que acabo de publicar.
Jonik
2
Solo una observación en el enlace de las principales aplicaciones que usan Guava. Soy un gran usuario de Facebook, Spotify, Google Translate y no son las aplicaciones más rápidas que se ejecutan, ¿verdad? De hecho son malos. FB No necesito decirte que Spotify con las últimas actualizaciones me hizo pasar de Premium a Grooveshark. Facebook y Spotify realmente luchan con la experiencia del usuario en dispositivos móviles, y curiosamente encuentro que Google Translate se ha ralentizado mucho por algo tan simple que hace. Ahora no he probado la guayaba. Pero lo pensaré dos veces antes de hacerlo. Este es el enlace: appbrain.com/stats/libraries/details/guava/google-guava
albertpeiro
77
Algo a tener en cuenta con Guava es el límite del método Android 65k, ya que Guava lib contiene más de 13k métodos. Alcanzar el límite no debería ser un problema, ya que puedes usar Multidex (pero no tengo experiencia de primera mano sobre eso). Consulte la discusión relacionada en la guía de mejores prácticas para Android de Futurice.
Jonik
3
@ Jonik No sé por qué no veo que más personas lo mencionen. Claro que tienes guardia, pero ¿realmente vale la pena? ¿Qué pasa con las compilaciones de depuración? También tendrás que ejecutar proguard en ellas. Tampoco considero que el multidexing sea una solución. Agrega fácilmente 2-5 segundos de tiempo de carga a la aplicación. En proyectos realmente grandes no es tan difícil alcanzar el límite de 65k. Imo Guava es un monolito que no soy realmente un fanático. Prefiero usar bibliotecas más pequeñas y enfocadas que traen un conjunto específico de funcionalidades.
Joao Sousa el