web analytics

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