【问题标题】:Is it a good idea to use Google Guava library for Android development?使用 Google Guava 库进行 Android 开发是个好主意吗?
【发布时间】:2013-02-20 11:28:03
【问题描述】:

我参与了 Android 应用程序的开发,这是一个用于 Web 服务的相当“厚”的移动客户端。它与服务器进行大量通信,但也有很多内部逻辑。所以,我决定使用Google Guava 库的一些特性来简化开发过程。以下是我非常感兴趣的特性列表:不可变集合、基本实用程序、集合扩展、函数式编程糖和习语(common.collectcommon.base)、原语实用程序(common.primitives)、散列实用程序(@987654331 @),并发工具(期货和AsyncFunction)。我不想在 Android 中使用的东西:common.cache(请参阅下面的问题)、common.eventbus(我们为此提供了更好的 Android 特定库,例如 Otto)、common.io (我们现在可以将okio 用于Android)。

我读到使用 Guava for Android 会显着减慢编译过程并降低整个运行时性能: Bad performance with Guava Cache on Android(在这种情况下是合理的,Android不需要使用Guava的缓存)和 Adding Google Guava to Android project - significantly slows down the build

那么,在 Android 项目中使用 Guava 库是否有效,或者该库旨在用于服务器端开发,我应该使用标准解决方案?任何解释将不胜感激。

【问题讨论】:

  • "但我听说 [...]" 你的消息来源是什么?
  • @jlordo 好的,看看我的编辑
  • 它可以安全使用,但当然:您需要检查库的每个类是否符合您的需求。 Guava Cache 是为服务器端实现的(可能在文档中编写),所以不要在 android 上使用它。构建时间通常不是问题,运行时间更重要。
  • appbrain.com/stats/libraries/details/guava/google-guava 表示 Guava 用于 很多 Android 应用程序中。
  • 很遗憾不能发布新的答案(我赞成重新开放)。有一些真实而有趣的问题,例如与值得关注的65k method limit 相关。

标签: java android guava


【解决方案1】:

(评论太大,所以我发布了一个答案。)我个人在每个 Java 项目中使用整个 Guava 库,并且当我没有显着且正确分析的性能问题时。例如,如果您确实有内存问题,例如在 Android 环境中,您可以使用ProGuard 仅获取您真正需要的 Guava 部分。

此外,there are many Android apps using Guava - 不仅是小型的,即直接来自 Google 的 Google Search 和 Youtube。

(您还应该看到compatibility note。)

【讨论】:

  • 我很好奇 Guava 和 APK 大小。简单的测试揭示了以下内容:“Hello world”,其他不多(调试):27KB;具有 Guava (15.0) 依赖和次要 Guava 使用的“Hello world”(调试):705KB;同样,发布版本,使用 ProGuard 优化:22KB。这次测试,再加上在开发大型实际应用程序时使用了 Guava,证实了我的信念,即 Guava 在 Android 上也完全没问题!
  • 另外,如果您在让 ProGuard 使用 Guava 依赖项时遇到问题,请参阅我刚刚发布的 this answer
  • 只是对使用 Guava 的顶级应用程序链接的观察。我是 Facebook、Spotify、Google 翻译的重度用户,它们不是运行速度最快的应用程序,对吧?事实上他们很糟糕。 FB 我不需要告诉你,最新更新的 Spotify 让我从 Premium 转到 Grooveshark。 Facebook 和 Spotify 在移动端的用户体验方面确实很挣扎,奇怪的是,我发现谷歌翻译因为它所做的这么简单的事情而慢了很多。现在我还没有尝试过番石榴。但在我做之前我会三思而后行。这是链接:appbrain.com/stats/libraries/details/guava/google-guava
  • 使用 Guava 需要注意的是 Android 65k 方法限制,因为 Guava 库包含超过 13k 方法。达到极限不应该是个问题,你可以去Multidex(但我没有这方面的第一手经验)。请参阅 Futurice Android 最佳实践指南中的 related discussion
  • @Jonik 我不知道为什么我没有看到更多人提到这一点。当然你有proguard,但它真的值得吗?调试版本怎么样,您还必须在这些版本上运行 proguard。我也不认为多索引是一种解决方案。它很容易为应用程序增加 2-5 秒的加载时间。在非常大的项目中,达到 65k 的限制并不难。 Imo Guava 是如此庞大,以至于我不是真正的粉丝。我宁愿使用能够带来特定功能集的更小、更专注的库。
猜你喜欢
  • 2011-05-31
  • 2020-02-11
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多