Является ли хорошей идеей использовать библиотеку Google Guava для разработки под Android?

122

Я занимаюсь разработкой приложения для Android, которое представляет собой довольно «толстый» мобильный клиент для веб-службы. Он активно взаимодействует с сервером, но также имеет много внутренней логики. Итак, я решил использовать некоторые возможности Google Guavaбиблиотеки, чтобы упростить процесс разработки. Вот список функций, которые меня очень интересуют: неизменяемые коллекции, базовые утилиты, расширения коллекций, сахар и идиомы функционального программирования ( common.collectи common.base), утилиты примитивов ( common.primitives), утилиты хеширования ( common.hash), параллельные утилиты (фьючерсы и AsyncFunction). Вещи, которые я не хочу использовать в Android: common.cache(см. Вопрос ниже), common.eventbus(у нас есть лучшие библиотеки для Android, такие как Otto ), common.io(мы можем использовать okio для Android сейчас).

Я читал, что использование Guava для Android может значительно замедлить процесс компиляции, а также снизить общую производительность во время выполнения: Плохая производительность с Guava Cache на Android (в этом случае это разумно, и нет необходимости использовать кеш Guava для Android) и Добавление Google Проект Guava to Android - значительно тормозит сборку

Итак, эффективно ли использовать библиотеку Guava в проекте Android или эта библиотека предназначена для использования только для разработки на стороне сервера, и я должен использовать стандартные решения? Будем очень признательны за любые объяснения.

Александр Караберов
источник
2
« Но я слышал, что [...] » каковы ваши источники?
jlordo
3
@jlordo Хорошо, посмотри мои правки
Александр Караберов
2
Это безопасно использовать, но, конечно, вам нужно проверить каждый класс библиотеки, соответствует ли он вашим потребностям. Guava Cache был реализован для серверной части (что, вероятно, написано в документации), поэтому не используйте его на Android. Время сборки обычно не является проблемой, время выполнения более важно.
Джон Смит
4
appbrain.com/stats/libraries/details/guava/google-guava указывает, что Guava используется во многих приложениях Android.
Луи Вассерман,
3
Жалко, что новые ответы не могут быть опубликованы (я за один голосовал за повторное открытие). Есть несколько реальных и интересных вопросов, например, связанных с ограничением метода 65k, которые заслуживают внимания.
Jonik

Ответы:

117

(Слишком много для комментария, поэтому я отправляю ответ.) Лично я использую всю библиотеку Guava в каждом проекте Java, и когда у меня нет значительных и правильно профилированных проблем с производительностью. Если у вас, например, есть проблемы с памятью, как в среде Android, вы можете использовать ProGuard, чтобы получить только те части Guava, которые вам действительно нужны.

Более того, есть много приложений для Android, использующих Guava, и не только маленькие, например, Google Search и Youtube, которые исходят напрямую от Google.

(Вы также должны увидеть примечание о совместимости .)

Xaerxess
источник
105
Мне было интересно узнать о размере Guava и APK . Простое тестирование показало следующее: «Привет, мир» и больше ничего (отладка): 27 КБ ; «Привет, мир» с зависимостью Guava (15.0) и незначительным использованием Guava (отладка): 705 КБ ; то же, релизная сборка, оптимизированная с помощью ProGuard: 22КБ . Этот тест, вместе с использованием Guava при разработке большого реального приложения, подтвердил мою уверенность в том, что Guava полностью подходит и для Android!
Jonik 05
2
Кроме того, если у вас возникнут проблемы с тем, чтобы ProGuard работал с зависимостью Guava, см. Этот ответ, который я только что опубликовал.
Jonik 05
2
Просто наблюдение по ссылке для лучших приложений, использующих Guava. Я активно пользуюсь Facebook, Spotify, Google Translate, и это не самые быстрые из существующих приложений, верно? На самом деле они плохие. FB Мне не нужно вам говорить, Spotify с последними обновлениями заставил меня перейти с Premium на Grooveshark. Facebook и Spotify действительно борются с пользовательским опытом на мобильных устройствах, и, что любопытно, я обнаружил, что Google Translate сильно замедлился из-за такой простой вещи. Сейчас гуаву не пробовал. Но я дважды подумаю, прежде чем это сделать. Это ссылка: appbrain.com/stats/libraries/details/guava/google-guava
albertpeiro
7
Что нужно знать о Guava, так это ограничение метода Android 65k, так как Guava lib содержит более 13k методов. Достижение предела не должно быть проблемой, так как вы можете перейти на Multidex (но у меня нет личного опыта). См. Соответствующее обсуждение в руководстве по передовым методам Futurice Android.
Jonik
3
@Jonik Я не знаю, почему я не вижу, чтобы люди говорили об этом. Конечно, у вас есть proguard, но оно того стоит? Что касается отладочных сборок, вам также придется запустить proguard на них. Я тоже не считаю мультидексирование решением. Это легко увеличивает время загрузки приложения на 2-5 секунд. В действительно больших проектах не так уж сложно достичь лимита в 65 тысяч. Имо Гуава - такой монолит, что я не особо его фанат. Я бы предпочел использовать более мелкие специализированные библиотеки с определенным набором функций.
Жоао Соуза