É uma boa ideia usar a biblioteca do Google Guava para desenvolvimento do Android?

122

Estou envolvido no desenvolvimento do aplicativo Android, que é um cliente móvel bastante "grosso" para um serviço da Web. Ele se comunica fortemente com o servidor, mas também possui muita lógica interna. Então, decidi usar alguns recursos da Google Guavabiblioteca para simplificar o processo de desenvolvimento. Aqui está uma lista de recursos nos quais estou muito interessado: coleções imutáveis, utilitários básicos, extensões de coleções, açúcar e expressões idiomáticas de programação funcional ( common.collecte common.base), utilitários primitivos ( common.primitives), utilitários de hash ( common.hash), utilitários simultâneos (futuros e AsyncFunction). Coisas que não quero usar no Android: common.cache(veja a pergunta abaixo), common.eventbus(temos melhores bibliotecas específicas do Android para isso, como Otto ), common.io(podemos usar okio para Android agora).

Li que o uso do Guava para Android pode desacelerar significativamente o processo de compilação e também diminuir o desempenho de todo o tempo de execução: Desempenho ruim com o Guava Cache no Android (neste caso, é razoável e não há necessidade de usar o cache do Guava para Android) e Adicionando o Google Projeto Goiaba para Android - diminui significativamente a compilação

Portanto, é eficiente usar a biblioteca Guava no projeto Android ou essa biblioteca foi projetada para ser usada apenas para o desenvolvimento no servidor, e devo usar soluções padrão? Quaisquer explicações serão muito apreciadas.

Oleksandr Karaberov
fonte
2
" Mas ouvi dizer que [...] " quais são suas fontes?
jlordo
3
@jlordo Ok ver as minhas edições
Oleksandr Karaberov
2
É seguro de usar, mas é claro: você precisa verificar cada classe da biblioteca se ela atender às suas necessidades. O Guava Cache foi implementado para o lado do servidor (que é propriamente escrito nos documentos), portanto, não o use no android. O tempo de construção geralmente não é realmente um problema, o tempo de execução é mais importante.
John Smith
4
appbrain.com/stats/libraries/details/guava/google-guava indica que o Guava é usado em muitos aplicativos Android.
Louis Wasserman
3
Vergonha que novas respostas não possam ser postadas (eu votei pela reabertura). Existem algumas questões reais e interessantes, por exemplo, relacionadas ao limite do método de 65k que merecem atenção.
Jonik

Respostas:

117

(Grande demais para comentar, por isso posto uma resposta.) Pessoalmente, uso toda a biblioteca Guava em todos os projetos Java e quando não tenho problemas de desempenho significativos e com perfil adequado . Se você tem, por exemplo, problemas de memória como no ambiente Android, pode usar o ProGuard para obter apenas essas partes do Guava realmente necessárias.

Além disso, existem muitos aplicativos Android usando o Guava - não apenas os pequenos, como o Google Search e o Youtube, que vêm diretamente do Google.

(Você também deve ver a nota de compatibilidade .)

Xaerxess
fonte
105
Fiquei curioso sobre o tamanho da goiaba e do APK . O teste simples revelou o seguinte: "Olá, mundo" e não muito mais (depuração): 27 KB ; "Olá, mundo", com dependência do Goava (15.0) e uso menor do Goiaba (depuração): 705KB ; a construção mesma, release, otimizado com ProGuard: 22KB . Este teste, juntamente com o uso do Guava durante o desenvolvimento de um grande aplicativo do mundo real, confirmou minha crença de que o Guava também é totalmente bom no Android!
Jonik
2
Além disso, se você tiver problemas para fazer com que o ProGuard funcione com a dependência do Guava, consulte esta resposta que acabei de publicar.
Jonik
2
Apenas uma observação no link para os principais aplicativos usando o Goiaba. Eu sou um usuário pesado do Facebook, Spotify, Google Translate e eles não são os aplicativos mais rápidos que estão rodando por aí, certo? Na verdade, eles são ruins. FB Não preciso dizer, o Spotify com as atualizações mais recentes me fez ir do Premium ao Grooveshark. O Facebook e o Spotify realmente lutam com a experiência do usuário no celular e, curiosamente, acho que o Google Translate diminuiu bastante a velocidade por uma coisa tão simples que faz. Agora eu não tentei a goiaba. Mas vou pensar duas vezes antes. Este é o link: appbrain.com/stats/libraries/details/guava/google-guava
albertpeiro
7
Algo a ter em atenção com o Guava é o limite do método do Android 65k, pois o Guava lib contém mais de 13k métodos. Atingir o limite não deve ser um problema, pois você pode usar o Multidex (mas não tenho experiência em primeira mão disso). Consulte a discussão relacionada no guia de práticas recomendadas do Futurice Android.
Jonik
3
@ Jonik Não sei por que não vejo mais pessoas mencionando isso. Claro que você tem proguard, mas vale mesmo a pena? E as compilações de depuração, você terá que executar o programa também. Também não considero o multidexing uma solução. Ele adiciona facilmente 2-5 segundos ao tempo de carregamento do aplicativo. Em projetos realmente grandes, não é tão difícil atingir o limite de 65k. Imo Guava é um monólito que não sou fã de verdade. Prefiro usar bibliotecas menores e focadas que trazem um conjunto específico de funcionalidades.
Joao Sousa