Est-ce une bonne idée d'utiliser la bibliothèque Google Guava pour le développement Android?

122

Je suis impliqué dans le développement d'une application Android qui est un client mobile plutôt "épais" pour un service Web. Il communique fortement avec le serveur mais a également beaucoup de logique interne. J'ai donc décidé d'utiliser certaines fonctionnalités de la Google Guavabibliothèque pour simplifier le processus de développement. Voici une liste de fonctionnalités qui m'intéressent beaucoup: collections immuables, utils de base, extensions de collection, sucre de programmation fonctionnelle et idiomes ( common.collectet common.base), utilitaires primitifs ( common.primitives), utilitaires de hachage ( common.hash), utils simultanés (futurs et AsyncFunction). Choses que je ne veux pas utiliser sous Android: common.cache(voir la question ci-dessous), common.eventbus(nous avons de meilleures bibliothèques spécifiques à Android pour cela, comme Otto ), common.io(nous pouvons utiliser okio pour Android maintenant).

J'ai lu que l'utilisation de Guava pour Android peut ralentir considérablement le processus de compilation et également diminuer l'ensemble des performances d'exécution: Mauvaises performances avec Guava Cache sur Android (dans ce cas, il est raisonnable et il n'est pas nécessaire d'utiliser le cache de Guava pour Android) et Ajout de Google Projet Guava to Android - ralentit considérablement la construction

Alors, est-il efficace d'utiliser la bibliothèque Guava dans un projet Android ou cette bibliothèque est conçue pour être utilisée uniquement pour le développement côté serveur, et je devrais opter pour des solutions standard? Toutes les explications seront très appréciées.

Oleksandr Karaberov
la source
2
" Mais j'ai entendu que [...] " quelles sont vos sources?
jlordo
3
@jlordo Ok voir mes modifications
Oleksandr Karaberov
2
Son utilisation est sûre, mais bien sûr: vous devez vérifier pour chaque classe de la bibliothèque si elle répond à vos besoins. Guava Cache a été implémenté pour le côté serveur (ce qui est probablement écrit dans la documentation), alors ne l'utilisez pas sur Android. Le temps de construction n'est généralement pas vraiment un problème, le temps d'exécution est plus important.
John Smith
4
appbrain.com/stats/libraries/details/guava/google-guava indique que Guava est utilisé dans de nombreuses applications Android.
Louis Wasserman
3
Dommage que de nouvelles réponses ne puissent pas être affichées (j'ai voté pour une réouverture). Il y a des problèmes réels et intéressants, par exemple liés à la limite de la méthode 65k, qui méritent l'attention.
Jonik

Réponses:

117

(Trop gros pour un commentaire, alors je poste une réponse.) Personnellement, j'utilise toute la bibliothèque Guava dans chaque projet Java et quand je n'ai pas de problèmes de performances significatifs et correctement profilés . Si vous avez, par exemple, des problèmes de mémoire comme dans l'environnement Android, vous pouvez utiliser ProGuard pour obtenir uniquement les parties de Guava dont vous avez vraiment besoin.

De plus, il existe de nombreuses applications Android utilisant Guava - pas seulement des petites, à savoir Google Search et Youtube, qui proviennent directement de Google.

(Vous devriez également voir la note de compatibilité .)

Xaerxess
la source
105
J'étais curieux de connaître la taille de Guava et APK . Des tests simples ont révélé ce qui suit: "Bonjour tout le monde" et pas grand chose d'autre (débogage): 27 Ko ; "Hello world" avec dépendance Guava (15.0) et utilisation mineure de Guava (débogage): 705KB ; de même, la libération de construction, optimisé avec ProGuard: 22KB . Ce test, ainsi que le fait d'avoir utilisé Guava tout en développant une grande application du monde réel, a confirmé ma conviction que Guava fonctionne parfaitement sur Android aussi!
Jonik
2
De plus, si vous rencontrez des problèmes pour que ProGuard fonctionne avec la dépendance Guava, consultez cette réponse que je viens de publier.
Jonik
2
Juste une observation sur le lien pour les meilleures applications utilisant Guava. Je suis un grand utilisateur de Facebook, Spotify, Google Translate et ce ne sont pas les applications les plus rapides, non? En fait, ils sont mauvais. FB Je n'ai pas besoin de vous dire, Spotify avec les dernières mises à jour m'a fait passer de Premium à Grooveshark. Facebook et Spotify ont vraiment du mal avec l'expérience utilisateur sur mobile, et curieusement, je trouve que Google Traduction a beaucoup ralenti pour une chose aussi simple. Maintenant, je n'ai pas essayé Guava. Mais je vais réfléchir à deux fois avant de le faire. Voici le lien: appbrain.com/stats/libraries/details/guava/google-guava
albertpeiro
7
Quelque chose à savoir avec Guava est la limite de méthode Android 65k, car Guava lib contient plus de 13k méthodes. Atteindre la limite ne devrait pas être un problème car vous pouvez utiliser Multidex (mais je n'en ai aucune expérience de première main). Consultez la discussion connexe dans le guide des meilleures pratiques de Futurice Android.
Jonik
3
@Jonik Je ne sais pas pourquoi je ne vois pas plus de personnes en parler. Bien sûr, vous avez proguard, mais en vaut-il vraiment la peine? Qu'en est-il des versions de débogage, vous devrez également exécuter proguard sur celles-ci. Je ne considère pas non plus le multidexing comme une solution. Il ajoute facilement un temps de chargement de 2 à 5 secondes à l'application. Dans les très gros projets, il n'est pas si difficile d'atteindre la limite des 65 000. Imo Guava est un tel monolithe que je ne suis pas vraiment fan. Je préfère utiliser des bibliothèques plus petites et ciblées qui apportent un ensemble spécifique de fonctionnalités.
Joao Sousa