Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 2084

สรุป Tips 10 ข้อจาก VDO เรื่อง Speeding Up Your Android Gradle Builds

$
0
0

ในงาน Google I/O 2017 นั้นมี session เรื่อง Speeding Up Your Android Gradle Builds โดยแนะนำเทคนิคต่าง ๆ ในการปรับแต่งการทำงานของ Gradle เพื่อเพิ่มความเร็วในการ build สำหรับ Android app เป้าหมายเพื่อเพิ่ม productivity ของนักพัฒนา app นั่นเอง มาดูกันเลย
Slow builds are not normal !!
ปล. การวัดประสิทธิภาพจะใช้ 3 ค่า คือ
  • Full build
  • Incremental build เมื่อ code java เปลี่ยนแปลง
  • Incremental build เมื่อ resource เปลี่ยนแปลง
โดยแต่ละข้อเป็นเรื่องพื้นฐานที่ต้องเข้าใจและนำไปใช้งานต่อไป ผลจากการแก้ไขนั้นอาจจะเหมือนหรือแตกต่างกันก็เป็นไปได้ เนื่องจากขึ้นอยู่กับปัจจัยหลาย ๆ อย่าง !! มาเริ่มกันเลย

1. ใช้งาน Android gradle plugin ล่าสุดจาก maven repository ของ Google

[gist id="b8cb2a95eb15ac8e4eaa715f301824de" file="1.txt"]

2. หลีกเลี่ยง Legacy multidex

คำถามแรกเลยก็คือ Legacy multidex คืออะไร ? คำตอบง่ายคือ Multidex + minSdkVersion < 21 นั่นเอง มันส่งผลให้การ build ช้ามาก ๆ !! ซึ่งใน Android Studio ตั้งแต่ 2.3 ขึ้นไปจะหลีกเลี่ยงการ build ลักษณะนี้เป็นอย่างมาก ดังนั้นใน project ไหนที่เป็น Legacy multidex แล้ว แนะนำให้สร้าง productFlavors ใหม่ เพื่อกำหนด minSdkVersion เป็น 21 ซะ ดังนี้ [gist id="b8cb2a95eb15ac8e4eaa715f301824de" file="2.txt"]

3. ปิด multi-APK ซะ

ซึ่งความสามารถนี้ไม่จำเป็นสำหรับขั้นตอนการพัฒนาเลย ดังนั้นให้ทำการปิดไปซะ ใน block splits{} ดังนี้ [gist id="b8cb2a95eb15ac8e4eaa715f301824de" file="3.txt"]

4. ให้ใช้งาน resource ที่มีขนาดเล็กที่สุดในการพัฒนา

แน่นอนว่าทำการ config เช่นเดียวกับ minSdkVersion นั่นเอง

5. ปิด PNG crunching ซะ !!

ซึ่ง Android studio เปิดความสามารถนี้อยู่แล้ว !! จะมีผลอย่างมากสำหรับ Full build แต่ส่วนอื่น ๆ ไม่แตกต่างกันเลย [gist id="b8cb2a95eb15ac8e4eaa715f301824de" file="5.txt"]

6. ใช้งาน Instant Run ซะ

รู้หรือยังว่าใน Android Studio แยกออกเป็นสองปุ่มนะ ระหว่าง Regular Run กับ Instant Run

7. หลีกเลี่ยงการเปลี่ยนแปลง resource ที่ไม่จำเป็น

เช่น versionCode ของ app เป็นต้น ซึ่งส่งผลต่อเวลาการ build อย่างมาก

8. สำหรับการใช้งาน dependency ต่าง ๆ อย่าใช้ Dynamic version เด็ดขาด

ตัวอย่างเช่น เป็นการบอก gradle ให้ตรวจสอบ version ล่าสุดของ dependency ซึ่งทำให้เวลาการ build สูงขึ้นมาก [gist id="b8cb2a95eb15ac8e4eaa715f301824de" file="8.txt"] ดังนั้นระบุ version ที่ต้องการไปเลยนะ

9. ระมัดระวังเรื่องของ Memory ที่จอง

แน่นอนว่าแต่ละ project ต้องการ memory ที่แตกต่างกันในการ build แต่ต้องระมัดระวังเป็นอย่างมาก

10. เปิด Gradle caching ด้วยเสมอ

มีมาใน Gradle 3.5 เป็นต้นมาก สามารถเปิดการใช้งานดังนี้ [gist id="b8cb2a95eb15ac8e4eaa715f301824de" file="10.txt"]

ผลจากการปรับปรุงตาม 10 ข้อได้ผลดังนี้

  • Full build เร็วขึ้น 3 เท่า
  • Incremental change สำหรับ Java เร็วขึ้น 12 เท่า
  • Incremental change สำหรับ Resource เร็วขึ้น 3 เท่า
สามารถดูการปรังแต่งเพิ่มเติมได้จาก Github :: Santa tracker android

สำหรับ VDO นี้ยังไม่หมดนะ !!

ยังมีเรื่องของ Multi-module project กับ Android gradle plugin 3.0 มีอะไรเปลี่ยนแปลงบ้าง ? เพื่อทำให้การ build เร็วขึ้น แน่นอนว่า ถ้า module ไหนมีการเปลี่ยนแปลงแล้ว จะต้องทำการ compile ใหม่เสมอ ทั้ง ๆ ที่การเปลี่ยนแปลงเหล่านั้นไม่ส่งผลกระทบต่อผู้ใช้งานเลย !!
โดยในการอ้างถึง module จะใช้ compile เสมอ ซึ่งใน VDO บอกว่าผิดอย่างแรงส์
ใน Android gradle plugin 3.0 แนะนำให้ใช้ api หรือ implementation แทน ส่วน compile นั้นถูก deprecated แล้ววว !! เพื่อหลีกเลี่ยงการ compile ที่ไม่จำเป็น นั่นคือช่วยให้การ build เร็วขึ้นเป็นกอง ดังนี้ [gist id="b8cb2a95eb15ac8e4eaa715f301824de" file="more.txt"]

คำถามที่ตามมาคือ แล้ว api ต่างกับ implementation อย่างไร ?

api จะเหมือนกับ compile นั่นเอง จะทำการ import public API จาก module นั้น ๆ มาเป็นของตัวเอง ส่วน implementation นั้นเพื่อไม่ให้ consumer เห็น public API จาก module นั้น ๆ ดังนั้นถ้า module นี้เปลี่ยนแปลง ก็จะไม่ทำการ compile นั่นเอง
ผลที่ตามมาคือ แนวคิดแบบ Modular จะมีประโยชน์ขึ้นอย่างมาก เพราะว่า gradle จะทำการ build แบบ parallel ลองใช้งานกันดูนะครับ

แล้วมีอะไรต่อไปอีก

สิ่งที่น่าสนใจคือ ทุกสิ่งทุกอย่างผิดพลาดได้เสมอ ไม่ว่าจะเป็น plugin ที่นำมาใช้ ไม่ว่าจะเป็นโครงสร้างของ code ที่ผิด ไม่ว่าจะเป็นการแก้ไข build.gradle แบบผิด ไม่ว่าจะเป็นการกำหนด Memory ที่ผิด ๆ
ดังนั้นเราต้องให้เวลากับการทำความเข้าใจเกี่ยวกับ Gradle และกระบวนการ build มากขึ้น

ถ้าต้องการตัวช่วยสำหรับดูว่าขั้นตอนการ build ช้าอย่างไร ?

Gradle ก็มีตัวช่วยดังนี้ ขอให้สนุกกับการ coding ครับ

Viewing all articles
Browse latest Browse all 2084

Trending Articles