[Android] Desugaring กับการใช้งาน Official Date Time Library
Date Time library เป็นสิ่งที่มีปัญหามายาวนาน เอาแค่ในส่วนของ java standard library เองก็มี Class ให้เลือกใช้แบบงง ๆ (และก็ยังมีต่อไป)
java.util.Calendar
java.util.Date
java.sql.Date
...
ทำให้นักพัฒนาหลายคนเลือกที่จะใช้ 3rd-party อย่าง Joda-Time เข้ามาแทน
หลังจากนั้น Java 8 ก็ออกสู่สาธารณชน การมาของ Java 8 สร้างความตื่นเต้นให้ Java dev. พอสมควร ประกอบด้วย major changes เช่น
- lambda expression
- stream function
- Java DateTime library ตัวใหม่ (
java.time.*
)
ในขณะที่ฝั่ง Android ก็อยากจะใช้บ้างอ่ะ แต่ติดว่าต้อง minimum SDK ต้องมากกว่า 26 หรือก็คือ Android 8.0 Oreo ขึ้นไปเท่านั้น เลยเกิด 2 ท่าหลักๆ เพื่อให้รองรับเครื่องเก่าๆ ด้วย คือ
- Jack Toolchain เพื่อใช้ Java DateTime ตัวใหม่ และ lambda expression ได้ด้วย
- 3rd-party library เฉพาะเรื่อง DateTime
แต่ก็ต้องบอกว่าตัวเลือกแรกข้อเสียค่อนข้างเยอะ คือบิ้วช้ามากก บวกกับตอนนั้นคนยังไม่ได้ชินกับ lambda ขนาดนั้น คนเลยเลือกใช้ 3rd-party เฉพาะเรื่อง DateTime มากกว่า เช่น
- https://github.com/JakeWharton/ThreeTenABP : based-on Java 8 DateTime library
- https://github.com/dlew/joda-time-android : based-on Joda DateTime library
มาถึงวันนี้ ที่ Kotlin official support จากทาง google แล้ว feature ต่างๆ เช่น lambda expression, concurrent และอื่น ๆ ก็มีของมาทดแทน และ Android dev ก็เขียน kotlin กันหมดแล้ว ทำให้ปัญหาเรื่อง syntax หมดไป เหลือเพียงแต่เรื่อง Java 8 DateTime library ที่ ณ วันนี้ก็ยังต้อง config ให้ใช้งานได้อยู่
ซึ่ง Jack Toolchain ได้หยุดพัฒนาแล้ว มีท่าใหม่ล่าสุด คือ Desugar (https://developer.android.com/studio/write/java8-support)
วิธีใช้งาน Desugaring
เปิดใช้งาน
compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
เพิ่ม dependency
dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") ... }
เพียงเท่านี้ เราก็สามารถใช้ DateTime library ที่เป็น official ได้แล้วครับ ใครที่ไม่เคยใช้ติดตามต่อได้ที่นี่เลยครับผม >> [Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม *เขียนตั้งแต่ 2016 ตอนนี้ 2022 แต่ทำไมเหมือนเป็นเรื่องใหม่ ใครใช้แล้วเจอปัญหาอะไรคอมเม้นแบ่งปันกันได้นะครับ