使用Google Guava库进行Android开发是一个好主意吗?


122

我参与了Android应用程序的开发,该应用程序是Web服务的“相当”厚的移动客户端。它与服务器进行大量通信,但也具有许多内部逻辑。因此,我决定使用Google Guava库的某些功能来简化开发过程。这是我非常感兴趣的功能列表:不可变集合,基本utils,集合扩展,函数式编程糖和习惯用法(common.collectcommon.base),基元实用程序(common.primitives),哈希实用程序(common.hash),并发实用程序(futures和AsyncFunction)。我不想在Android中使用的东西:(common.cache请参见下面的问题),common.eventbus(为此我们有更好的Android特定库,例如Otto),common.io(我们可以使用okio 现在适用于Android)。

我读到,使用Guava for Android会大大减慢编译过程,并降低整个运行时性能:Android上的Guava Cache的性能 较差 (在这种情况下,这是合理的,不需要为Android使用Guava的缓存),并且 添加了Google番石榴到Android项目-大大减慢了构建速度

那么,是不是有效的在Android项目使用番石榴库或该库的设计使用用于服务器端开发,我应该用标准的解决方案去?任何解释将不胜感激。


2
但是我听说[...] ”您的来源是什么?
jlordo

3
@jlordo好看到我的编辑
阿列克Karaberov

2
它是安全使用的,但是当然:您需要检查库的每个类是否适合您的需求。Guava Cache是​​为服务器端实现的(最好在文档中编写),因此请勿在android上使用它。构建时间通常并不是真正的问题,运行时间更为重要。
约翰·史密斯,

4
appbrain.com/stats/libraries/details/guava/google-guava表示很多 Android应用程序都使用了Guava 。
路易·瓦瑟曼

3
遗憾的是,新的答案无法发布(我投一票赞成重新开放)。有一些真实有趣的问题,例如与65k方法限制有关的问题值得关注。
Jonik 2015年

Answers:


117

(太大了,无法发表评论,所以我发布了一个答案。)就我个人而言,在每个Java项目中都使用整个Guava库,并且在我没有出现严重且正确分析的性能问题时。例如,如果您确实有内存问题,例如在Android环境中,则可以使用ProGuard仅获取您真正需要的Guava的这些部分。

此外,有很多使用Guava的Android应用程序 -不仅是小型应用程序,例如Google Search和Youtube,它们直接来自Google。

(您还应该看到兼容性说明。)


105
我很好奇Guava和APK的大小。简单的测试显示以下内容:“ Hello world”和其他内容(调试):27KB;具有Guava(15.0)依赖关系和较小的Guava使用率(调试)的“ Hello world”:705KB;相同的发行版本,使用ProGuard优化:22KB。这项测试以及在开发大型真实应用程序时使用了Guava,证实了我的信念,即Guava在Android上也完全可以!
Jonik 2014年

2
另外,如果您在使ProGuard与Guava依赖项一起使用时遇到问题,请参阅我刚刚发布的答案
Jonik 2014年

2
只是对使用Guava的热门应用程序的链接的观察。我是Facebook,Spotify,Google Translate的重度用户,它们不是运行速度最快的应用程序,对吗?实际上,它们很糟糕。FB:我不需要告诉你,Spotify的最新更新使我从Premium转到Grooveshark。Facebook和Spotify确实在移动用户体验方面挣扎,而奇怪的是,我发现Google Translate所做的如此简单的操作已经大大降低了速度。现在我还没有尝试过番石榴。但是我会三思而后行。这是链接:appbrain.com/stats/libraries/details/guava/google-guava
albertpeiro 2014年

7
Guava需要注意的是Android 65k方法的局限性,因为Guava库包含超过13k个方法。达到限制应该不是问题,因为您可以使用Multidex(但我对此没有亲身经验)。请参阅Futurice Android最佳做法指南中的相关讨论
Jonik

3
@Jonik我不知道为什么我看不到更多的人提到这一点。当然,您有proguard,但这真的值得吗?关于调试版本,您还必须在这些版本上运行proguard。我也不认为multidexing是解决方案。它可以轻松为应用程序增加2-5秒的加载时间。在大型项目中,达到65k的限制并不难。艾莫·番石榴(Imo Guava)真是个巨人,我并不是一个真正的粉丝。我宁愿使用较小的,有针对性的库,以引入一组特定的功能。
Joao Sousa,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.