![android-good-resource]()
![android-good-resource]()
นั่งอ่านบทความเรื่อง
Compile ‘android:best:1.1.1’
มันมีเนื้อหาที่ Android Developer ทุกคนไม่น่าพลาด
ประกอบไปด้วย
- แหล่งความรู้เกี่ยวกับ Android
- เครื่องมือที่จำเป็นต่อการพัฒนา
- Library ต่าง ๆ แบ่งเป็นกลุ่มได้ชัดเจน
ดังนั้นเลยขออนุญาตเจ้าของบทความ
เพื่อนำมาแปลไว้อ่านนิดหน่อย
บางหัวข้อก็ไม่ได้แปล
เริ่มจากแหล่งศึกษาหาความรู้เกี่ยวกับ Android
บอกได้คำเดียวว่าเยอะมากมาย เยอะจนไม่รู้จะเริ่มกันตรงไหน !!
ดังนั้น developer ก็ลองเลือกดูได้นะ ว่าชอบแบบไหน ?
ส่วนตัวผมติดตามจาก 4 แหล่งนี้
ต่อมาเรื่องของเครื่องมือในการพัฒนา
แน่นอนว่า สิ่งที่ขาดไม่ได้เลยก็คือ
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 พังไปเลย
ดังตัวอย่าง
[gist id="0226c01d245e873950785dea920b25ef" file="support_library.txt"]
2. Google Play Service
ถ้า app ไหนต้องการใช้งาน Google API ไม่ว่าจะเป็น
Google Map, Google Pay, Ads และอื่น ๆ ก็ต้องใช้ library นี้
แต่การใช้งานนั้น แนะนำให้ใช้เฉพาะ service ที่ต้องการเท่านั้น
ไม่เช่นนั้นจะมีปัญหาเรื่องจำนวน method ที่เกิน 65k นะ
ตัวอย่างการใช้งาน
[gist id="0226c01d245e873950785dea920b25ef" file="google_play_service.txt"]
3. Reactive library
คงปฏิเสธไม่ได้ว่า Reactive programming ได้รับความนิยมสูงมาก รวมทั้ง Android ด้วย
ทำให้จัดการเรื่อง asynchonous, event-based และ stream ง่ายขึ้น
โดยใน Android ใช้ library ชื่อว่า
RxAndroid
การทำงานภายในจะใช้งาน
RxJava
ดังนั้นการใช้งานต้องการ library 2 ตัวดังนี้
[gist id="0226c01d245e873950785dea920b25ef" file="reactive.txt"]
และยังมี 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 มาให้ใช้งานมากมาย เช่น
สามารถศึกษาเพิ่มเติมได้จาก
Annotations to support your contracts
[gist id="0226c01d245e873950785dea920b25ef" file="annotation.txt"]
2. Butter Knife
ได้เตรียม Annotation สำหรับการ binding กับ view และ event ต่าง ๆ
ซึ่งทำให้ code มันน้อยลงไปอย่างมาก
[gist id="0226c01d245e873950785dea920b25ef" file="butterknife.txt"]
3. Data Binding Library
เป็น 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 และ ทดสอบได้ง่ายขึ้นมาก
แถมอ่านเข้าใจง่ายอีกด้วย (จริงไหมนะ !!)
[gist id="0226c01d245e873950785dea920b25ef" file="dagger.txt"]
มาดู Library สำหรับการ Build และ Compile กันบ้าง
สำหรับ app ใหญ่ ๆ ต้องไม่พลาดกับ
Multidex Support Library
เพราะว่าจำนวน method เกิน 65k แน่นอน
แต่แนะนำว่า นี่เป็นวิธีการสุดท้ายสำหรับการแก้ไขปัญหา !!
ก่อนอื่นลดจำนวน library ที่ไม่จำเป็นลงไปก่อนนะ
[gist id="0226c01d245e873950785dea920b25ef" file="multidex.txt"]
มาถึงเรื่องของการทดสอบบ้างสิ
ปล. ใครไม่ทดสอบระบบงานบ้างนะ ?
คิดว่าไม่มีหรอก แต่ว่าจะทดสอบแบบไหนเท่านั้นเอง !!
รู้ไหมว่า สำหรับ 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) มาใช้งานได้
[gist id="0226c01d245e873950785dea920b25ef" file="junit.txt"]
2. Instrumentation test
เป็นชุดการทดสอบที่ต้องการเครื่องจริง หรือ emulator
แน่นอนว่า การทดสอบเหล่านี้ต้องใช้เวลาที่สูงขึ้น
สำหรับทดสอบพวก function และ UI test นั่นเอง
จะต้องใช้งาน Test Runner Library
[gist id="0226c01d245e873950785dea920b25ef" file="runner.txt"]
และยังมี
Espresso สำหรับการทดสอบส่วนของ UI test แบบง่าย ๆ ให้อีกด้วย
[gist id="0226c01d245e873950785dea920b25ef" file="espresso.txt"]
ลองดูตัวอย่างเพิ่มเติมที่
Android Testing Blueprint
และศึกษาเพิ่มเติมได้จากที่นี่
Practice for testing
ชักจะเยอะ และ ยาวล่ะ ขอปิดท้ายด้วยเรื่องของการจัดการข้อมูลดีกว่า
เริ่มด้วยการจัดการพวกรูปภาพ ประกอบไปด้วย 3 library หลัก คือ
จะเลือกอะไรก็คิด วิเคราะห์ แยกแยะกันเอาเองครับ
[gist id="0226c01d245e873950785dea920b25ef" file="image.txt"]
ต่อมาเรื่องการติดต่อผ่าน REST API คงหนีไม่พ้น Retrofit
โดย app ส่วนใหญ่น่าจะใช้ library ตัวนี้
[gist id="0226c01d245e873950785dea920b25ef" file="retrofit.txt"]
ส่วนเรื่องการจัดการข้อมูล
น่าจะใช้
Gson สำหรับการจัดการข้อมูลในรูปแบบ JSON
และการจัดการ caching data น่าจะใช้งาน
DiskLRUCache
ส่วนการจัดการเรื่องวันที่ และ เวลา
ต้องหนีไม่พ้น
Joda Time แน่นอน
ลองอ่านเพิ่มเติมได้จากต้นฉบับนะครับ
ขอบอกได้คำเดียว มันเยอะมาก ๆ
แต่มีประโยชน์มากเช่นเดียวกัน