ควรใช้ไลบรารี Google Guava สำหรับการพัฒนา Android หรือไม่


122

ฉันมีส่วนร่วมในการพัฒนาแอปพลิเคชัน Android ซึ่งเป็นไคลเอนต์มือถือที่ค่อนข้าง "หนา" สำหรับบริการบนเว็บ มันสื่อสารกับเซิร์ฟเวอร์อย่างหนัก แต่ก็มีตรรกะภายในมากมายเช่นกัน ดังนั้นฉันจึงตัดสินใจใช้คุณสมบัติบางอย่างของGoogle Guavaไลบรารีเพื่อลดความซับซ้อนของกระบวนการพัฒนา นี่คือรายการคุณสมบัติที่ฉันสนใจมาก: คอลเลคชันที่ไม่เปลี่ยนรูป, ยูทิลิตี้พื้นฐาน, ส่วนขยายคอลเลคชัน, น้ำตาลการเขียนโปรแกรมเชิงฟังก์ชันและสำนวน ( common.collectและcommon.base), ยูทิลิตี้ดั้งเดิม ( common.primitives), ยูทิลิตี้แฮช ( common.hash), ยูทิลิตี้พร้อมกัน (ฟิวเจอร์สและAsyncFunction) สิ่งที่ฉันไม่ต้องการใช้ใน Android: common.cache(ดูคำถามด้านล่าง) common.eventbus(เรามี libs เฉพาะของ Android ที่ดีกว่าสำหรับสิ่งนี้เช่นOtto ) common.io(เราสามารถใช้okio สำหรับ Android ตอนนี้)

ฉันอ่านพบว่าการใช้ Guava สำหรับ Android สามารถทำให้กระบวนการคอมไพล์ช้าลงอย่างมากและยังลดประสิทธิภาพรันไทม์ทั้งหมด: ประสิทธิภาพที่ ไม่ดีกับ Guava Cache บน Android (ในกรณีนี้ถือว่าสมเหตุสมผลและไม่จำเป็นต้องใช้แคชของ Guava สำหรับ Android) และการ เพิ่ม Google โครงการ Guava to Android - ทำให้การสร้างช้าลงอย่างมาก

ดังนั้นจึงเป็นสิ่งที่มีประสิทธิภาพการใช้ห้องสมุดฝรั่งในโครงการ Android หรือห้องสมุดนี้ถูกออกแบบมาเพื่อนำมาใช้เพียงเพื่อการพัฒนาด้านเซิร์ฟเวอร์และฉันควรจะไปด้วยโซลูชั่นมาตรฐาน? คำอธิบายใด ๆ จะได้รับการชื่นชมมาก


2
" แต่ฉันได้ยินมาว่า [... ] " แหล่งข้อมูลของคุณคืออะไร?
jlordo

3
@jlordo ตกลงดูการแก้ไขของฉัน
Oleksandr Karaberov

2
ใช้งานได้อย่างปลอดภัย แต่แน่นอน: คุณต้องตรวจสอบแต่ละคลาสของห้องสมุดว่าเหมาะสมกับความต้องการของคุณหรือไม่ Guava Cache ถูกนำมาใช้สำหรับฝั่งเซิร์ฟเวอร์ (ซึ่งเขียนได้ในเอกสาร) ดังนั้นอย่าใช้กับ Android เวลาในการสร้างมักจะไม่เป็นปัญหาจริงๆเวลาทำงานสำคัญกว่า
John Smith

4
appbrain.com/stats/libraries/details/guava/google-guavaระบุว่ามีการใช้ Guava ในแอป Android จำนวนมาก
Louis Wasserman

3
อัปยศที่ไม่สามารถโพสต์คำตอบใหม่ได้ (ฉันหนึ่งคนโหวตให้เปิดอีกครั้ง) มีบางประเด็นที่เป็นจริงและน่าสนใจเช่นที่เกี่ยวข้องกับขีด จำกัด วิธีการ 65kที่สมควรได้รับความสนใจ
Jonik

คำตอบ:


117

(ใหญ่เกินไปสำหรับความคิดเห็นดังนั้นฉันจึงโพสต์คำตอบ) โดยส่วนตัวแล้วฉันใช้ไลบรารี Guava ทั้งหมดในทุกโปรเจ็กต์ Java และเมื่อฉันไม่มีปัญหาด้านประสิทธิภาพที่สำคัญและถูกต้อง ตัวอย่างเช่นหากคุณมีปัญหาเกี่ยวกับหน่วยความจำเช่นในสภาพแวดล้อม Android คุณสามารถใช้ProGuardเพื่อรับเฉพาะส่วนต่างๆของ Guava ที่คุณต้องการจริงๆ

ยิ่งไปกว่านั้นมีแอพ Android มากมายที่ใช้ Guavaไม่ใช่แค่แอพขนาดเล็กเช่น Google Search และ Youtube ซึ่งมาจาก Google โดยตรง

(คุณควรดูหมายเหตุความเข้ากันได้ด้วย)


105
ผมอยากรู้เกี่ยวกับฝรั่งและเอพีเคขนาด การทดสอบอย่างง่ายเปิดเผยสิ่งต่อไปนี้: "Hello world" & not much else (debug): 27KB ; "สวัสดีชาวโลก" ด้วยการพึ่งพา Guava (15.0) และการใช้งาน Guava เล็กน้อย (debug): 705KB ; เดียวกันสร้างปล่อยเหมาะสมกับ ProGuard: 22KB การทดสอบนี้ร่วมกับการใช้ Guava ในขณะที่พัฒนาแอปในโลกแห่งความจริงขนาดใหญ่ยืนยันความเชื่อของฉันว่า Guava ก็ใช้ได้ดีบน Android เช่นกัน!
Jonik

2
นอกจากนี้หากคุณประสบปัญหาในการทำให้ ProGuard ทำงานกับการพึ่งพา Guava โปรดดูคำตอบที่ฉันเพิ่งโพสต์
Jonik

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 ไม่รู้ทำไมไม่เห็นมีคนพูดถึงเรื่องนั้นอีก แน่ใจว่าคุณมีโปรการ์ด แต่คุ้มจริงหรือ? สิ่งที่เกี่ยวกับ debug builds คุณจะต้องเรียกใช้ proguard ด้วยเช่นกัน ฉันไม่ถือว่า multidexing เป็นทางออกเช่นกัน เพิ่มเวลาในการโหลดแอปได้อย่างง่ายดาย 2-5 วินาที ในโปรเจ็กต์ใหญ่ ๆ มันไม่ยากที่จะถึงขีด จำกัด 65k Imo Guava เป็นเสาหินที่ฉันไม่ได้เป็นแฟนจริงๆ ฉันอยากจะใช้ไลบรารีที่มีขนาดเล็กและเน้นที่มีชุดฟังก์ชันเฉพาะ
Joao Sousa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.