[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

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

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

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

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

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

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

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

[Java] Java Static Variable และ Static Method

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

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