Android : การย้าย Library มาใช้ AndroidX ใน Android Studio
สวัสดีผู้อ่านครับ ช่วงนี้ผมก็หา library ใน Flutter เล่นไปเรื่อยๆ แล้วก็เอามาเขียนบล็อกเป็นบันทึกเอาไว้ โดยก็มี library หลายตัวที่แนะนำให้เรา migrate android support library ไปใช้ AndroidX ดังนั้นในบล็อกนี้ก็เลยจะสรุปวิธีการ Migrate AndroidX ครับ ง่ายมากๆ
รู้จักกับ AndroidX
AndroidX (หรืออีกชื่อ Android Jetpack) คือ library ที่เรียกว่า redesign structure ของ library ที่ bundle ใน android OS ใหม่ เพราะของเดิมที่ใช้มานาน ไม่เป็นระเบียบ ทีม Android ก็เลยมีแนวคิดที่จะปรับปรุง จัดระเบียบใหม่ แต่ทุกอย่างก็ไม่ได้ย้ายมาเป็น androidx ทั้งหมดนะ ซึ่งรวมๆแล้ว library ตัวที่ย้ายมามีแค่ชื่อของ package กับ Maven artifact names เท่านั้นที่ถูกเปลี่ยนใหม่ ส่วนพวกชื่อ method ชื่อตัวแปร field ต่างๆไม่เปลี่ยนแปลง
ตัวอย่างชื่อ package name จาก support library มาเป็น androidx
com.android.support:viewpager // Android Support Library
androidx.viewpager:viewpager:1.0.0 // AndroidX
ทำไมต้อง Migrate ไป AndroidX
แล้วทำไมเราต้อง Migrate ด้วยล่ะ นั่นก็เพราะว่า library ตัวเดิม เช่น AppCompat เวอชัน 28.x นั้นจะเป็นเวอชันสุดท้าย และเวอชันต่อไปจะมีเฉพาะใน AndroidX แล้วเท่านั้น นั่นหมายความว่า API ต่างๆใน Android Q จะใช้ AndroidX ทั้งหมด
เริ่มต้นนับกันใหม่
การมาของ androidx จะเริ่มต้นนับเวอชันกันใหม่ คือใช้เวอชัน 1.0 และใช้ androidx.* นำหน้าเสมอ
เริ่มต้น Migrate
ใน Android Studio 3.2 ขึ้นไปจะมีเมนูสำหรับ Migrate support library เดิมในโปรเจคของเรามาใช้ androidx
หากกำลังใช้ Flutter เราต้องเปิด android project ใน Android Studio โดยคลิกขวา โฟลเดอร์ android > Flutter > Open Android module in Android Studio
จากนั้นเมื่อเปิด Android Studio มาแล้ว ให้ไปที่เมนู Refactor > Migrate to AndroidX
จะมีหน้าต่างแนะนำว่า ให้เรา backup โปรเจคเดิมไว้เป็น .zip ก่อนมัย เผื่อกรณีเกิดข้อผิดพลาดระหว่าง Migrate
หากตกลงก็เลือก path ที่ต้องการ
จากนั้น Android Studio จะลิสรายการ package ที่สามารถ Migrate ออกมาให้เราดู ให้เรากดที่ Do Refactor ได้เลยก็เป็นอันเสร็จ
เมื่อเข้าไปดูที่ app/src/build.gradle จะเห็นว่า dependencies ใหม่เป็น androidx แล้ว
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
}
แล้วก็ที่ไฟล์ gradle.properties ก็จะเพิ่ม android.useAndroidX = true ให้ด้วย
ส่วนไฟล์ .zip ที่เรา backup ไว้ ข้างในก็จะเป็น code โปรเจคเราประมาณนี้
สรุป
ในอนาคต AndroidX น่าจะมาแทนที่ตัว library เดิม เป็นหนึงในเคสของฝั่ง Native ที่มีผลกับการเขียน cross platform เช่น Flutter เพราะใน Flutter เองมี Native project ก็จะหนีไม่พ้นปัญหาเกี่ยวกับ Native ทั้งฝั่ง iOS และ Android หากเราเข้าใจการทำงานของฝั่ง Native บ้างก็จะมีประโยชน์มากทีเดียวในการเขียน Cross Platform
ดูรายชื่อ class ของ support เดิมกับ androidx ได้ที่ลิงค์นี้
https://developer.android.com/jetpack/androidx/migrate
Credit.
https://medium.com/google-developer-experts/converting-your-android-app-to-jetpack-85aecfce34d3