AndroidX คือชุดไลบรารี Jetpack จาก Google ที่แทนที่ Support Library แบบเก่า ตามGoogle Developer Documentation, 2024 AndroidX มีส่วนประกอบที่เข้ากันได้ย้อนหลังสำหรับ Android ทุกเวอร์ชันและเป็นมาตรฐานของการพัฒนา Android สมัยใหม่ ไลบรารี AndroidX มีเครื่องมือสำหรับ UI การนำทาง การจัดการข้อมูล กล้องถ่ายรูป และงานเบื้องหลัง
ประเด็นสำคัญ
AndroidX คือไลบรารีโอเพนซอร์สที่เป็นส่วนหนึ่งของ Android Jetpack Google เปิดตัว AndroidX ในปี 2018 เพื่อแทนที่ Support Library ซึ่งให้ส่วนประกอบที่เข้ากันได้ย้อนหลังสำหรับ Android เวอร์ชันเก่าตั้งแต่ปี 2011
ก่อน AndroidX แต่ละส่วนประกอบของ Support Library มีเวอร์ชันของตัวเองที่ผูกกับ targetSdkVersion นักพัฒนาต้องรวมหลายเวอร์ชันของไลบรารีเดียวกันในเวลาเดียวกัน ซึ่งนำไปสู่ความขัดแย้งของ dependencies และขนาด APK ที่เพิ่มขึ้น
AndroidX แก้ปัญหานี้ด้วยการกำหนดเวอร์ชันเชิงความหมาย (SemVer) ตอนนี้แต่ละไลบรารีเป็น Gradle artifact อิสระที่มีเวอร์ชันในรูปแบบ MAJOR.MINOR.PATCH นักพัฒนาสามารถอัปเดต Room จาก 2.4.0 เป็น 2.6.0 โดยไม่ต้องแตะ Activity, Fragment หรือโมดูลอื่น ๆ
รุ่นเสถียรแรกของ AndroidX 1.0.0 เปิดตัวในเดือนธันวาคม 2018 พร้อมกับ Android 9 Pie Google ประกาศว่า Support Library จะเข้าสู่โหมดบำรุงรักษาและส่วนประกอบใหม่ทั้งหมด — Navigation, WorkManager, Compose — จะเปิดตัวเป็นส่วนหนึ่งของ AndroidX เท่านั้น Support Library เวอร์ชันสุดท้าย — 28.0.0 — เปิดตัวในปี 2019
ตาม Google I/O 2019 เหตุผลหลักของการเปลี่ยนแปลงคือความจำเป็นในการเร่งการเผยแพร่อัปเดต ในโมเดลเก่า ไลบรารีหนึ่งต้องรออีกไลบรารีหนึ่งเนื่องจากเวอร์ชันแพ็คเกจเดียว AndroidX ขจัดปัญหาคอขวดนี้ และ Jetpack เริ่มได้รับรุ่น major และ minor ทุก 2–3 เดือน
ความแตกต่างหลักคือ เนมสเปซ Support Library ใช้แพ็คเกจ android.support.* ในขณะที่ AndroidX ย้ายไปใช้ androidx.* การเปลี่ยนแปลงนี้ทำให้สามารถแบ่งไลบรารีออกเป็นโมดูลตามฟังก์ชันได้ ตัวอย่างเช่น Fragment ใน Support Library เรียกว่า android.support.v4.app.Fragment ในขณะที่ใน AndroidX คือ androidx.fragment.app.Fragment
ความแตกต่างสำคัญประการที่สองคือ สถาปัตยกรรม AndroidX มาพร้อมกับ Jetpack — ชุดคำแนะนำเกี่ยวกับสถาปัตยกรรมแอปพลิเคชัน Jetpack ประกอบด้วย ViewModel, LiveData, Room, Navigation และ WorkManager ซึ่งออกแบบมาเป็นระบบนิเวศแบบรวมศูนย์แทนที่จะเป็นยูทิลิตี้ที่กระจัดกระจาย
ความเข้ากันได้ย้อนหลัง ก็ดีขึ้นเช่นกัน ในขณะที่ Support Library รองรับ Android 2.3+ AndroidX รับประกันการทำงานบนอุปกรณ์ที่ใช้ Android 4.0 (API 14) ขึ้นไป — ครอบคลุมมากกว่า 99% ของอุปกรณ์ที่ใช้งานอยู่ตาม Google Play Console 2024
AndroidX มีไลบรารีมากกว่า 100 รายการแบ่งตามหมวดหมู่ แต่ละกลุ่มครอบคลุมพื้นที่เฉพาะ: UI, ข้อมูล, การนำทาง, งานเบื้องหลัง, มัลติมีเดีย และการทดสอบ ด้านล่างเป็นภาพรวมของโมดูลหลัก
androidx.core:core คือไลบรารีพื้นฐานที่มีเวอร์ชันที่เข้ากันได้ย้อนหลังของระบบ API: NotificationCompat, ActivityCompat, ContextCompat โมดูล core-ktx มีส่วนขยาย Kotlin สำหรับทำงานกับไฟล์ SharedPreferences และองค์ประกอบมุมมอง
ไลบรารี androidx.activity:activity นำเสนอ Activity Result API (registerForActivityResult) ซึ่งแทนที่ startActivityForResult ที่เลิกใช้งานแล้ว โมดูล fragment:fragment จัดการวงจรชีวิตของ fragment และรองรับ FragmentManager สำหรับธุรกรรมและแบ็คสแต็ก
androidx.lifecycle คือรากฐานของสถาปัตยกรรม Jetpack LifecycleOwner และ LifecycleObserver ช่วยให้ส่วนประกอบตอบสนองต่อการเปลี่ยนแปลงวงจรชีวิตของ Activity หรือ Fragment ViewModel รักษาข้อมูลระหว่างการหมุนหน้าจอ ในขณะที่ LiveData แจ้ง UI เกี่ยวกับการเปลี่ยนแปลงข้อมูล
class MainViewModel : ViewModel() {
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> = _users
fun loadUsers() {
viewModelScope.launch {
val result = repository.getUsers()
_users.value = result
}
}
}
androidx.recyclerview:recyclerview เป็นส่วนประกอบที่ทรงพลังสำหรับแสดงรายการและกริด RecyclerView รองรับ LayoutManager (LinearLayoutManager, GridLayoutManager), ItemDecoration และแอนิเมชันผ่าน ItemAnimator ไลบรารี ListAdapter พร้อม AsyncListDiffer ช่วยให้การอัปเดตรายการง่ายขึ้นด้วยการคำนวณความแตกต่างอัตโนมัติ
androidx.navigation:navigation คือไลบรารีสำหรับการนำทางระหว่างหน้าจอ Navigation Component ทำงานร่วมกับ NavHostFragment และ NavController รองรับ Safe Args สำหรับการส่งพารามิเตอร์แบบมีชนิดและ Deep Links สำหรับลิงก์ภายนอก NavGraph อธิบายเส้นทางทั้งหมดในไฟล์ XML
androidx.compose.ui คือเฟรมเวิร์ก UI แบบประกาศ Jetpack Compose ที่สร้างบน Kotlin แตกต่างจากระบบ View ตรงที่ Compose จะวาดเฉพาะองค์ประกอบที่เปลี่ยนแปลงผ่านการจัดเรียงใหม่ ส่วนประกอบ Material Design 3 (Button, TextField, Scaffold) มีให้ใช้งานในโมดูล material3
| ไลบรารี | Artifact | วัตถุประสงค์ |
|---|---|---|
| Fragment | androidx.fragment | การจัดการ fragment และธุรกรรม |
| RecyclerView | androidx.recyclerview | รายการและกริดที่ปรับให้เหมาะสม |
| Navigation | androidx.navigation | การนำทางระหว่างหน้าจอ |
| Compose UI | androidx.compose.ui | UI แบบประกาศใน Kotlin |
androidx.room:room คือ ORM สำหรับจัดเก็บข้อมูลในเครื่อง Room สร้างคลาส DAO จากคำสั่ง SQLite ที่มีคำอธิบายประกอบ ตรวจสอบไวยากรณ์ SQL ในเวลาคอมไพล์ และรองรับ RxJava และ Kotlin Flow เวอร์ชัน 2.6 มีการรองรับ KSP สำหรับการสร้างโค้ดที่เร็วขึ้น
androidx.work:workmanager คือไลบรารีสำหรับงานเบื้องหลังที่รับประกันการดำเนินการ WorkManager รองรับงานเป็นระยะ ห่วงโซ่งาน (beginWith, then) และเกณฑ์การเริ่มต้น (Constraints: เครือข่าย, การชาร์จ, พื้นที่จัดเก็บ) แม้ว่าแอปจะปิดอยู่ WorkManager ก็จะส่งงานหลังจากรีสตาร์ทอุปกรณ์
androidx.datastore:datastore คือตัวแทนที่ทันสมัยของ SharedPreferences DataStore ใช้ Kotlin Coroutines และ Flow ทำงานทั้งแบบซิงโครนัสและอะซิงโครนัส ป้องกันการบล็อกเธรด UI Preferences DataStore จัดเก็บคู่คีย์-ค่าแบบง่าย ในขณะที่ Proto DataStore จัดการวัตถุแบบมีชนิดผ่าน Protocol Buffers
การโยกย้ายอัตโนมัติ เป็นวิธีที่ Google แนะนำสำหรับการเปลี่ยนจาก Support Library ไปยัง AndroidX Android Studio ตั้งแต่เวอร์ชัน 3.2 มีเครื่องมือในตัว Refactor Migrate to AndroidX ซึ่งแทนที่เนมสเปซและอัปเดต dependencies ใน build.gradle
ก่อนการโยกย้าย คุณต้อง อัปเดตเวอร์ชัน compileSdk เป็น 28 หรือสูงกว่า นอกจากนี้ ตรวจสอบให้แน่ใจว่าไลบรารีของบุคคลที่สามทั้งหมดรองรับ AndroidX หาก dependency ใดยังไม่ได้โยกย้าย ให้ใช้แฟล็ก android.enableJetifier=true ใน gradle.properties — มันจะเขียนไบต์โค้ดของไลบรารีของบุคคลที่สามใหม่โดยอัตโนมัติ
ใน Android Studio เลือก Refactor Migrate to AndroidX จากเมนู IDE จะสแกนทั้งโปรเจกต์ ค้นหาการนำเข้าทั้งหมดจากแพ็คเกจ android.support.* และแทนที่ด้วย androidx.* dependencies ใน app/build.gradle จะได้รับการอัปเดตด้วย — Support Library artifacts จะถูกแทนที่ด้วยเวอร์ชัน AndroidX ที่สอดคล้องกัน
หลังจากการโยกย้าย Gradle Sync อาจแสดงข้อผิดพลาดหากไม่พบ dependencies บางรายการ ตรวจสอบรายการไลบรารีที่ใช้ในเอกสาร Google Maven — AndroidX artifacts ทั้งหมดเผยแพร่บน google() หากไลบรารีไม่พร้อมใช้งาน ให้เพิ่ม mavenCentral() ใน repositories
android {
compileSdk 34
}
dependencies {
// ไลบรารีสนับสนุน (เลิกใช้แล้ว)
// implementation 'com.android.support:appcompat-v7:28.0.0'
// AndroidX
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.activity:activity-ktx:1.9.3'
implementation 'androidx.fragment:fragment-ktx:1.8.5'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.room:room-runtime:2.6.1'
ksp 'androidx.room:room-compiler:2.6.1'
}
หากโปรเจกต์ใหญ่เกินไปหรือมี มุมมองที่กำหนดเอง จาก Support Library การแทนที่อัตโนมัติอาจไม่สมบูรณ์ ให้แทนที่สตริงทั้งหมดในโค้ดด้วยตนเอง: เปลี่ยนการนำเข้า แอตทริบิวต์ XML (app/src/main/res) และการอ้างอิงในแมนิเฟสต์ สำหรับแอตทริบิวต์ Support Library คำนำหน้า android: จะเปลี่ยนเป็น app: (เช่น app:cardCornerRadius แทน android:cardCornerRadius)
หลังจากการโยกย้ายด้วยตนเอง ให้ตรวจสอบ การอ้างอิง R Support Library ส่งออกทรัพยากรผ่าน android.support.v7.appcompat.R ในขณะที่ AndroidX ใช้ androidx.appcompat.R ค้นหาในโปรเจกต์และแทนที่การอ้างอิงทั้งหมดไปยังเส้นทาง R เก่า การ build โปรเจกต์ควรเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาดหรือคำเตือนการเลิกใช้งาน
ข้อดีแรกของ AndroidX คือความเป็นโมดูล คุณรวมเฉพาะไลบรารีที่คุณใช้จริงเท่านั้น หากแอปของคุณต้องการเพียง RecyclerView และ Navigation ก็ไม่จำเป็นต้องดึง Support Library ทั้งหมดพร้อมส่วนประกอบ View ทั้งหมด ซึ่งช่วยลดขนาด APK และเพิ่มความเร็วในการ build
ข้อดีที่สองคือ การอัปเดตเป็นประจำ Jetpack เผยแพร่เวอร์ชันเสถียรทุก 1–3 เดือน Room 2.6.0 ที่เปิดตัวในปี 2024 เพิ่มการรองรับ KSP และความเข้ากันได้กับ Kotlin 2.0 Navigation 2.8.0 นำเสนอเส้นทางที่ปลอดภัยชนิดอิงจาก Kotlinx Serialization นักพัฒนาได้รับฟีเจอร์ใหม่โดยไม่ต้องรอ Android เวอร์ชันถัดไป
ข้อดีที่สามคือ การรวมเข้ากับ Kotlin ไลบรารี AndroidX ทั้งหมดมีโมดูล -ktx พร้อมฟังก์ชันส่วนขยาย viewLifecycleOwner.lifecycleScope เริ่มต้น coroutine ในบริบทของ fragment collectLatest ประมวลผล Flow และ SharedFlow และ StateFlow เข้ากันได้อย่างสมบูรณ์กับส่วนประกอบที่รับรู้วงจรชีวิต ทำให้โค้ดกระชับและปลอดภัยยิ่งขึ้น
ความเข้ากันได้ย้อนหลัง เป็นข้อได้เปรียบหลักของ AndroidX เหนือ API แพลตฟอร์มใหม่ คุณสามารถใช้ AppCompatDelegate.setDefaultNightMode สำหรับธีมมืดบน Android 4.0+, NotificationCompat.setBubble สำหรับบับเบิลบน Android 5.0+ และ LocationRequestCompat สำหรับตำแหน่งแบบรวมบน Android 4.0+ ความครอบคลุมอุปกรณ์ถึง 99% โดยไม่ต้องเพิ่มเวอร์ชัน SDK ขั้นต่ำ
ข้อดีที่สี่คือ การทดสอบ AndroidX มีไลบรารี androidx.test สำหรับการเขียนการทดสอบแบบ instrumented และ unit test FragmentScenario และ ActivityScenario ช่วยให้ทดสอบส่วนประกอบ UI แบบแยกส่วน ในขณะที่ TestNavHostController ช่วยตรวจสอบการนำทางโดยไม่ต้องรันอุปกรณ์จริง MockK และ Robolectric เติมเต็มระบบนิเวศ
คำถามที่พบบ่อย
AndroidX ใช้เนมสเปซ androidx.* แทน android.support.* มีการกำหนดเวอร์ชันอิสระ (SemVer) รวมไลบรารี Jetpack และรองรับส่วนขยาย Kotlin -ktx Support Library ถูกหยุดนิ่งที่เวอร์ชัน 28.0.0 ในปี 2019
ใน Android Studio เปิดแฟล็ก Use AndroidX ในขั้นตอนสร้างโปรเจกต์ สำหรับโปรเจกต์ที่มีอยู่ ให้เพิ่ม android.useAndroidX=true และ android.enableJetifier=true ใน gradle.properties จากนั้นแทนที่ dependencies ใน build.gradle ด้วย artifacts จากกลุ่ม androidx
Google Play กำหนดให้แอปและการอัปเดตทั้งหมดต้องใช้ AndroidX การบำรุงรักษา Support Library หยุดลงแล้วและไม่ได้รับแพตช์ความปลอดภัยอีกต่อไป หากแอปของคุณยังไม่ได้โยกย้าย อาจทำให้การอัปเดตถูกปฏิเสธใน Google Play Console
Jetpack คือชุดไลบรารี เครื่องมือ และแนวทางจาก Google สำหรับการพัฒนาแอปพลิเคชัน Android AndroidX เป็นรากฐานของ Jetpack Jetpack ประกอบด้วย Architecture Components (Lifecycle, ViewModel, Room), UI (Compose, Fragment, RecyclerView) และ Behavior (WorkManager, Navigation, CameraX)
ได้ Jetpack Compose เองเป็นส่วนหนึ่งของ AndroidX (androidx.compose.ui) ไลบรารี ViewModel, Navigation, Room และ WorkManager เข้ากันได้อย่างสมบูรณ์กับ Compose ฟังก์ชัน collectAsState() และ collectAsStateWithLifecycle() ให้การรวม Flow กับฟังก์ชัน Composable
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ