[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 ท่าหลักๆ เพื่อให้รองรับเครื่องเก่าๆ ด้วย คือ 

  1. Jack Toolchain เพื่อใช้ Java DateTime ตัวใหม่ และ lambda expression ได้ด้วย
  2. 3rd-party library เฉพาะเรื่อง DateTime


         แต่ก็ต้องบอกว่าตัวเลือกแรกข้อเสียค่อนข้างเยอะ คือบิ้วช้ามากก บวกกับตอนนั้นคนยังไม่ได้ชินกับ lambda ขนาดนั้น คนเลยเลือกใช้ 3rd-party เฉพาะเรื่อง DateTime มากกว่า เช่น


         มาถึงวันนี้ ที่ 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 แต่ทำไมเหมือนเป็นเรื่องใหม่ ใครใช้แล้วเจอปัญหาอะไรคอมเม้นแบ่งปันกันได้นะครับ 

Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Port Forwarding สำหรับคนใช้ AIS Fibre

Popular

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

เรื่องของ ++i กับ i++

Port Forwarding สำหรับคนใช้ AIS Fibre

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง