Ist es eine gute Idee, die Google Guava-Bibliothek für die Android-Entwicklung zu verwenden?

122

Ich bin an der Entwicklung einer Android-Anwendung beteiligt, die ein ziemlich "dicker" mobiler Client für einen Webdienst ist. Es kommuniziert stark mit dem Server, hat aber auch viel innere Logik. Daher habe ich mich entschlossen, einige Funktionen der Google GuavaBibliothek zu verwenden, um den Entwicklungsprozess zu vereinfachen. Hier ist eine Liste von Funktionen, die mich sehr interessieren: unveränderliche Sammlungen, Basis-Utils, Sammlungserweiterungen, funktionale Programmierung Zucker und Redewendungen ( common.collectund common.base), primitive Dienstprogramme ( common.primitives), Hashing-Dienstprogramme ( common.hash), gleichzeitige Dienstprogramme (Futures und AsyncFunction). Dinge, die ich in Android nicht verwenden möchte : common.cache(siehe Frage unten), common.eventbus(wir haben bessere Android-spezifische Bibliotheken dafür, wie Otto ), common.io(wir können okio verwenden für Android jetzt).

Ich habe gelesen, dass die Verwendung von Guava für Android den Kompilierungsprozess erheblich verlangsamen und auch die gesamte Laufzeitleistung verringern kann: Schlechte Leistung mit Guava Cache unter Android (in diesem Fall ist dies sinnvoll und es ist nicht erforderlich, Guavas Cache für Android zu verwenden) und Hinzufügen von Google Guava-zu-Android-Projekt - verlangsamt den Build erheblich

Ist es also effizient, die Guava-Bibliothek in einem Android-Projekt zu verwenden, oder ist diese Bibliothek nur für die serverseitige Entwicklung vorgesehen, und ich sollte mich für Standardlösungen entscheiden? Alle Erklärungen werden sehr geschätzt.

Oleksandr Karaberov
quelle
2
" Aber ich habe das gehört [...] " Was sind deine Quellen?
Lordo
3
@ jlordo Ok siehe meine Änderungen
Oleksandr Karaberov
2
Es ist sicher zu benutzen, aber natürlich: Sie müssen für jede Klasse der Bibliothek prüfen, ob es Ihren Anforderungen entspricht. Guava Cache wurde für die Serverseite implementiert (was wahrscheinlich in den Dokumenten geschrieben ist), verwenden Sie ihn also nicht auf Android. Die Erstellungszeit ist normalerweise kein wirkliches Problem, die Laufzeit ist wichtiger.
John Smith
4
appbrain.com/stats/libraries/details/guava/google-guava gibt an, dass Guava in vielen Android-Apps verwendet wird.
Louis Wasserman
3
Schade, dass keine neuen Antworten veröffentlicht werden können (ich habe für die Wiedereröffnung gestimmt). Es gibt einige reale und interessante Probleme, z. B. im Zusammenhang mit dem 65k-Methodenlimit , die Beachtung verdienen.
Jonik

Antworten:

117

(Zu groß für einen Kommentar, daher poste ich eine Antwort.) Persönlich verwende ich die gesamte Guava-Bibliothek in jedem Java-Projekt und wenn ich keine signifikanten und richtig profilierten Leistungsprobleme habe. Wenn Sie beispielsweise Speicherprobleme wie in einer Android-Umgebung haben, können Sie mit ProGuard nur die Teile von Guava abrufen, die Sie wirklich benötigen.

Darüber hinaus gibt es viele Android-Apps, die Guava verwenden - nicht nur kleine, dh Google Search und Youtube, die direkt von Google stammen.

(Sie sollten auch den Kompatibilitätshinweis sehen .)

Xaerxess
quelle
105
Ich war neugierig auf die Größe von Guave und APK . Einfache Tests ergaben Folgendes: "Hallo Welt" & nicht viel anderes (Debug): 27 KB ; "Hallo Welt" mit Guava (15.0) Abhängigkeit und geringer Guava-Nutzung (Debug): 705KB ; das gleiche, Release-Build, optimiert mit ProGuard: 22KB . Dieser Test, zusammen mit der Verwendung von Guava bei der Entwicklung einer großen realen App, bestätigte meine Überzeugung, dass Guava auch für Android völlig in Ordnung ist!
Jonik
2
Wenn Sie Probleme haben, ProGuard mit der Guava-Abhängigkeit zum Laufen zu bringen, lesen Sie diese Antwort, die ich gerade gepostet habe.
Jonik
2
Nur eine Beobachtung über den Link für Top-Apps mit Guava. Ich bin ein starker Nutzer von Facebook, Spotify und Google Translate und sie sind nicht die schnellsten Apps, die es gibt, oder? Tatsächlich sind sie schlecht. FB Ich muss dir nicht sagen, Spotify mit den neuesten Updates hat mich dazu gebracht, von Premium zu Grooveshark zu wechseln. Facebook und Spotify haben wirklich Probleme mit der Nutzererfahrung auf Mobilgeräten, und seltsamerweise hat Google Translate für eine so einfache Sache, die es tut, viel langsamer gemacht. Jetzt habe ich Guava nicht ausprobiert. Aber ich werde zweimal überlegen, bevor ich es tue. Dies ist der Link: appbrain.com/stats/libraries/details/guava/google-guava
albertpeiro
7
Bei Guava ist das Limit für Android 65k-Methoden zu beachten, da Guava lib über 13k-Methoden enthält. Das Erreichen des Limits sollte kein Problem sein, da Sie Multidex verwenden können (aber ich habe keine Erfahrung aus erster Hand damit). Siehe ähnliche Diskussion bei Futurice Android Best Practices Guide.
Jonik
3
@ Jonik Ich weiß nicht, warum ich nicht mehr Leute sehe, die das erwähnen. Sicher, Sie haben Proguard, aber ist es das wirklich wert? Was ist mit Debug-Builds? Sie müssen auch auf diesen Proguard ausführen. Ich halte Multidexing auch nicht für eine Lösung. Es fügt der App leicht 2-5 Sekunden Ladezeit hinzu. In wirklich großen Projekten ist es nicht so schwer, das 65k-Limit zu erreichen. Imo Guava ist so ein Monolith, dass ich nicht wirklich ein Fan bin. Ich würde lieber kleinere, fokussierte Bibliotheken verwenden, die bestimmte Funktionen bieten.
Joao Sousa