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

[แปล] compile ‘android:best:1.1.1’  ห้ามพลาดสำหรับ Android Developer !!

$
0
0

android-good-resource

android-good-resource นั่งอ่านบทความเรื่อง 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 พังไปเลย ดังตัวอย่าง [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 มาให้ใช้งานมากมาย เช่น
  • @Nullable
  • @StringRes
สามารถศึกษาเพิ่มเติมได้จาก 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 แน่นอน ลองอ่านเพิ่มเติมได้จากต้นฉบับนะครับ ขอบอกได้คำเดียว มันเยอะมาก ๆ แต่มีประโยชน์มากเช่นเดียวกัน

Viewing all articles
Browse latest Browse all 2036

Trending Articles