นั่งอ่านบทความเรื่อง Compile ‘android:best:1.1.1’
มันมีเนื้อหาที่ Android Developer ทุกคนไม่น่าพลาด
ประกอบไปด้วย
- แหล่งความรู้เกี่ยวกับ Android
- เครื่องมือที่จำเป็นต่อการพัฒนา
- Library ต่าง ๆ แบ่งเป็นกลุ่มได้ชัดเจน
ดังนั้นเลยขออนุญาตเจ้าของบทความ
เพื่อนำมาแปลไว้อ่านนิดหน่อย
บางหัวข้อก็ไม่ได้แปล
เริ่มจากแหล่งศึกษาหาความรู้เกี่ยวกับ Android
บอกได้คำเดียวว่าเยอะมากมาย เยอะจนไม่รู้จะเริ่มกันตรงไหน !!
ดังนั้น developer ก็ลองเลือกดูได้นะ ว่าชอบแบบไหน ?
ส่วนตัวผมติดตามจาก 4 แหล่งนี้
- Android Developer ใน Google+ ขาดไม่ได้เลย อาจจะขัดใจหน่อย เพราะว่าคนส่วนใหญ่ไม่ค่อยใช้งาน
- Android Weekly แนะนำให้ติดตามไว้เลย ส่วนผมเก็บไว้ใน feed
- Google I/O มีของเยอะมาก ๆ ยังดูไม่หมดเลย
- Google Developers บน Medium
ต่อมาเรื่องของเครื่องมือในการพัฒนา
แน่นอนว่า สิ่งที่ขาดไม่ได้เลยก็คือ Android Studio
เพิ่งปล่อย Android Studio 2.0 ออกมาพร้อมกับ Instant Run ออกมาด้วย
แต่แนะนำให้ปิดความสามารถนี้ไปก่อนนะครับ
เพราะว่า มันพังบ่อยมาก ๆ ถ้าไม่เชื่อก็ลองดู
รวมทั้งมี Emulator ตัวใหม่ที่เร็วจริง ๆ
และมีความสามารถมากมาย
แต่ก็แลกกับ Memory เริ่มต้นที่ 1 GB นะครับ
ปล. ใครยังใช้ Eclipse อยู่ก็เปลี่ยนเถอะนะ
เพราะว่ามัน deprecated ไปแล้ว
สามารถเรียนรู้การใช้งาน และ configuration Android Studio เพิ่มเติมได้ที่
ส่วน Emulator อื่น ๆ แนะนำ Genymotion Emulator
ซึ่ง Android Developer น่าจะใช้กันเกือบหมด
มาดู Library หลัก ๆ สำหรับการพัฒนา Android Application
1. Support Library
ใครไม่ใช้นี่แปลกมากนะ ซึ่งมี library เพียบเลยไม่ว่าจะเป็น
- V4 support library
- Multidex support library
- V7 appcompat
- V8, V13, V14, V17 … จะเยอะกันไปไหน
ปล. อย่าลืม update version ใหม่ ๆ กัน
ส่วนการใช้งานนั้น จากเอกสารของ google
แนะนำให้เริ่มใช้งานจาก V4 และ V7 appcompat
และควรใช้ version เดียวกันนะ
ไม่เช่นนั้นเดี๋ยวจะ compile ไม่ผ่าน หรืออาจจะทำให้ app พังไปเลย
ดังตัวอย่าง
2. Google Play Service
ถ้า app ไหนต้องการใช้งาน Google API ไม่ว่าจะเป็น
Google Map, Google Pay, Ads และอื่น ๆ ก็ต้องใช้ library นี้
แต่การใช้งานนั้น แนะนำให้ใช้เฉพาะ service ที่ต้องการเท่านั้น
ไม่เช่นนั้นจะมีปัญหาเรื่องจำนวน method ที่เกิน 65k นะ
ตัวอย่างการใช้งาน
3. Reactive library
คงปฏิเสธไม่ได้ว่า Reactive programming ได้รับความนิยมสูงมาก รวมทั้ง Android ด้วย
ทำให้จัดการเรื่อง asynchonous, event-based และ stream ง่ายขึ้น
โดยใน Android ใช้ library ชื่อว่า RxAndroid
การทำงานภายในจะใช้งาน RxJava
ดังนั้นการใช้งานต้องการ library 2 ตัวดังนี้
และยังมี Library อื่น ๆ เข้ามาช่วยเหลือ เช่น
- RxLifeCycle เข้ามาจัดการเรื่อง unsubscription แบบอัตโนมัติ เพื่อลดปัญหาเรื่อง memory leak
- RxBinding สำหรับการ binding API ต่าง ๆ เข้ากับ User Interface
- Frodo plugin สำหรับเก็บ log การทำงานของ RxJava
แน่นอนว่า learning curve หรือการเรียนรู้เรื่อง Reactive programming มันต้องสูงกว่าปกติ
แต่ก็ไม่ใช่เรื่องยากมากนัก เพราะว่ามีแหล่งเรียนรู้มากมาย เช่น
Library ต่าง ๆ ที่ช่วยทำให้ code สวย และ ดีขึ้น (Clean Code)
1. Support Annotation
เป็น library ช่วยดักจับข้อผิดพลาดต่าง ๆ ให้
และทำให้ code ดูสวยงามมากขึ้น
ซึ่งมี annotation มาให้ใช้งานมากมาย เช่น
- @Nullable
- @StringRes
สามารถศึกษาเพิ่มเติมได้จาก Annotations to support your contracts
2. Butter Knife
ได้เตรียม Annotation สำหรับการ binding กับ view และ event ต่าง ๆ
ซึ่งทำให้ code มันน้อยลงไปอย่างมาก
เป็น library จาก Google เอง
เพื่อให้สามารถทำการ binding API ต่าง ๆ กับ layout xml ได้เลย
นั่นทำให้ลด java code ไปอย่างมาก
แต่ก็ยังคงอยู่ในสถานะ beta อยู่ !!
สามารถใช้งานได้กับ Android Plugin for Gradle 1.5.0-alpha1 ขึ้นไปนะ
4. Dagger 2
เป็น Library ที่มาจาก Square อีกแล้วครับท่าน
ปัจจุบัน Google เข้าไปพัฒนาเองแล้ว
เป็น Dependency Injection framework นั่นเอง
ทำให้ code ไม่ผูกมัดกันจนเกินไป
ทำให้ code แยกส่วนการทำงานกันอย่างชัดเจน
ส่งผลให้ code สามารถ reuse และ ทดสอบได้ง่ายขึ้นมาก
แถมอ่านเข้าใจง่ายอีกด้วย (จริงไหมนะ !!)
มาดู Library สำหรับการ Build และ Compile กันบ้าง
สำหรับ app ใหญ่ ๆ ต้องไม่พลาดกับ Multidex Support Library
เพราะว่าจำนวน method เกิน 65k แน่นอน
แต่แนะนำว่า นี่เป็นวิธีการสุดท้ายสำหรับการแก้ไขปัญหา !!
ก่อนอื่นลดจำนวน library ที่ไม่จำเป็นลงไปก่อนนะ
มาถึงเรื่องของการทดสอบบ้างสิ
ปล. ใครไม่ทดสอบระบบงานบ้างนะ ?
คิดว่าไม่มีหรอก แต่ว่าจะทดสอบแบบไหนเท่านั้นเอง !!
รู้ไหมว่า สำหรับ Android app เราก็สามารถเขียน code เพื่อทดสอบได้นะ
ซึ่งมี library ต่าง ๆ ให้ใช้งานดังนี้
Testing Support Library
พัฒนาจาก Google เองนั่นแหละ เตรียม library ต่าง ๆ ไว้ให้พร้อมเลย
ประกอบไปด้วย
1. Pure JUnit test
สามารถทำการ run โดยไม่ต้องการ emulator เลย
ทำให้เราสามารถเขียนชุดการทดสอบกับ Java code ทั่วไป
เช่นพวก domain และ business logic ต่าง ๆ
ตลอดจนการใช้งาน resource ต่าง ๆ
และสามารถนำแนวคิดของ TDD (Test-Driven Development) มาใช้งานได้
2. Instrumentation test
เป็นชุดการทดสอบที่ต้องการเครื่องจริง หรือ emulator
แน่นอนว่า การทดสอบเหล่านี้ต้องใช้เวลาที่สูงขึ้น
สำหรับทดสอบพวก function และ UI test นั่นเอง
จะต้องใช้งาน Test Runner Library
และยังมี Espresso สำหรับการทดสอบส่วนของ UI test แบบง่าย ๆ ให้อีกด้วย
ลองดูตัวอย่างเพิ่มเติมที่ Android Testing Blueprint
และศึกษาเพิ่มเติมได้จากที่นี่ Practice for testing
ชักจะเยอะ และ ยาวล่ะ ขอปิดท้ายด้วยเรื่องของการจัดการข้อมูลดีกว่า
เริ่มด้วยการจัดการพวกรูปภาพ ประกอบไปด้วย 3 library หลัก คือ
จะเลือกอะไรก็คิด วิเคราะห์ แยกแยะกันเอาเองครับ
ต่อมาเรื่องการติดต่อผ่าน REST API คงหนีไม่พ้น Retrofit
โดย app ส่วนใหญ่น่าจะใช้ library ตัวนี้
ส่วนเรื่องการจัดการข้อมูล
น่าจะใช้ Gson สำหรับการจัดการข้อมูลในรูปแบบ JSON
และการจัดการ caching data น่าจะใช้งาน DiskLRUCache
ส่วนการจัดการเรื่องวันที่ และ เวลา
ต้องหนีไม่พ้น Joda Time แน่นอน
ลองอ่านเพิ่มเติมได้จากต้นฉบับนะครับ
ขอบอกได้คำเดียว มันเยอะมาก ๆ
แต่มีประโยชน์มากเช่นเดียวกัน