Jetpack คือชุดไลบรารี Android จาก Google ที่ช่วยให้การพัฒนาง่ายขึ้นและเร่งสร้างแอปพลิเคชันที่เสถียร คอมโพเนนต์อย่าง ViewModel, Room และ Navigation แก้ปัญหางานทั่วไป: การจัดการวงจรชีวิต การจัดเก็บข้อมูล และการนำทาง ตามข้อมูลจาก Android Developers (2026) Jetpack ครอบคลุมไลบรารีกว่า 50 รายการ ซึ่งแต่ละรายการสามารถย้อนกลับเข้ากันได้กับ Android 5.0 (API 21) ผ่าน AndroidX — ไลบรารีความเข้ากันได้ที่แทนที่ Support Library
ประเด็นสำคัญ
Android Jetpack คือชุดรวมไลบรารี เครื่องมือ และคำแนะนำด้านสถาปัตยกรรมจาก Google ซึ่งเปิดตัวในปี 2018 ที่ Google I/O Jetpack เข้ามาแทนที่ Support Library และ Android Architecture Components โดยรวมเข้าด้วยกันเป็นระบบนิเวศเดียว ก่อน Jetpack แต่ละไลบรารี Android ได้รับการอัปเดตอย่างอิสระ ทำให้เกิดความขัดแย้งของเวอร์ชัน Jetpack ซิงโครไนซ์เวอร์ชันภายใต้ตัวระบุ AndroidX เดียว และนำเสนอโมเดลเวอร์ชันหลักที่เสถียรพร้อมแพตช์ย่อย
ไลบรารี Jetpack แบ่งออกเป็นสี่หมวดหมู่: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat) แต่ละหมวดหมู่จัดการงานของเลเยอร์เฉพาะของแอปพลิเคชัน ตั้งแต่การจัดการข้อมูลไปจนถึงอินเทอร์เฟซผู้ใช้
Google ส่งเสริมหลักการ Jetpack สามประการ: accelerate development (boilerplate น้อยลง, ตรรกะทางธุรกิจมากขึ้น), eliminate boilerplate (ViewModel ขจัดการบันทึกสถานะด้วยตนเอง, Room ขจัดการเขียน SQLiteOpenHelper) และ build with confidence (แต่ละไลบรารีผ่านการทดสอบกว่า 15,000 ครั้งก่อนวางจำหน่าย) ตามข้อมูลจาก Android Developers (2026) แอปที่ใช้ Jetpack มีการพังที่เกี่ยวข้องกับวงจรชีวิตน้อยลง 30%
ไลบรารี Jetpack ทั้งหมดเผยแพร่ภายใต้ตัวระบุ AndroidX (อาร์ติแฟกต์อย่าง androidx.*) AndroidX แทนที่ Support Library (อาร์ติแฟกต์อย่าง com.android.support.*) โดยแบ่งไลบรารีแบบเสาหินออกเป็นอาร์ติแฟกต์แบบโมดูลาร์พร้อมการกำหนดเวอร์ชันอิสระ การโยกย้ายไปยัง AndroidX ทำได้ผ่านตัวเลือก android.useAndroidX=true ใน gradle.properties — Android Studio จะแปลงการนำเข้าโดยอัตโนมัติ
ViewModel คือคอมโพเนนต์ศูนย์กลางของสถาปัตยกรรม Jetpack ที่เก็บข้อมูล UI ต่างจาก Activity ที่ถูกทำลายเมื่อหมุนหน้าจอ ViewModel ยังคงอยู่ในหน่วยความจำ ผู้ใช้กรอกฟอร์ม หมุนโทรศัพท์ — ข้อมูลจะไม่สูญหาย ViewModel จะถูกล้างโดยอัตโนมัติเมื่อ LifecycleOwner (Activity หรือ Fragment) สิ้นสุดวงจรชีวิตอย่างถาวร (finish)
class ProfileViewModel : ViewModel() {
private val _userName = MutableLiveData<String>()
val userName: LiveData<String> = _userName
fun loadProfile(userId: String) {
viewModelScope.launch {
val user = repository.getUser(userId)
_userName.value = user.name
}
}
}
@OptIn(ExperimentalLifecycleApi::class)
class MyObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
println("หน้าจอเริ่มทำงาน")
}
}
LiveData — คอนเทนเนอร์ข้อมูลที่สังเกตได้ซึ่งเคารพวงจรชีวิต หากหน้าจอไม่ปรากฏ (onStop) LiveData จะไม่ส่งการอัปเดต — ซึ่งป้องกันการรั่วไหลของหน่วยความจำและการพังเมื่อพยายามอัปเดต Activity ที่ไม่มีอยู่ Lifecycle — คลาสที่เก็บสถานะปัจจุบัน (CREATED, STARTED, RESUMED) และอนุญาตให้คอมโพเนนต์อื่นสมัครรับการเปลี่ยนแปลงสถานะ เมื่อรวมกันแล้ว ViewModel, LiveData และ Lifecycle จะเป็นรากฐานของสถาปัตยกรรมเชิงรับของ Android
viewModelScope — CoroutineScope ในตัวที่ผูกกับวงจรชีวิตของ ViewModel coroutine ทั้งหมดที่เริ่มในขอบเขตนี้จะถูกยกเลิกโดยอัตโนมัติเมื่อ ViewModel ถูกล้าง ซึ่งช่วยขจัดการจัดการ Disposable และ CompositeDisposable ด้วยตนเองในแต่ละ ViewModel การทำงานกับ viewModelScope ต้องการการพึ่งพา androidx.lifecycle:lifecycle-viewmodel-ktx
Room คือไลบรารี ORM ของ Jetpack ที่ให้เลเยอร์นามธรรมเหนือ SQLite แทนที่จะเขียนคำสั่ง SQL ดิบและแปลง Cursor เป็นวัตถุด้วยตนเอง นักพัฒนาประกาศ Entity (ตาราง), DAO (Data Access Object) และ Database (จุดเข้า) Room จะตรวจสอบคำสั่ง SQL ในเวลาคอมไพล์ผ่านคำอธิบายประกอบ @Query — หากตารางหรือคอลัมน์ไม่มีอยู่ การสร้างจะล้มเหลวพร้อมข้อผิดพลาดที่ชัดเจน
@Entity
data class User(
@PrimaryKey val id: String,
val name: String,
val email: String
)
@Dao
interface UserDao {
@Query("SELECT * FROM User WHERE id = :userId")
suspend fun getUser(userId: String): User?
@Insert
suspend fun insertUser(user: User)
}
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
Entity User อธิบายตารางที่มีสามคอลัมน์ DAO ประกาศฟังก์ชัน suspend สำหรับทำงานกับ coroutine — คำสั่งจะทำงานบนเธรดพื้นหลังโดยอัตโนมัติ Room รองรับการโยกย้ายผ่านคำอธิบายประกอบ @Migration: นักพัฒนาอธิบายสคริปต์ SQL สำหรับการเปลี่ยนระหว่างเวอร์ชัน และ Room จะดำเนินการโดยไม่สูญเสียข้อมูล หากไม่มีการโยกย้าย Room จะโยน IllegalStateException — ซึ่งป้องกันโครงการจากการสูญเสียข้อมูลโดยไม่ตั้งใจเมื่ออัปเดตสคีมา
Room เก็บเฉพาะชนิดดั้งเดิมและตัวหุ้มเท่านั้น สำหรับการเก็บรายการ Date หรือวัตถุที่กำหนดเอง จะใช้ @TypeConverter — เมธอดแบบสแตติกที่แปลงชนิดเป็น String (JSON) หรือ Long (timestamp) ความสัมพันธ์ระหว่างตารางถูกจำลองผ่านวัตถุที่ซ้อนกันพร้อมคำอธิบายประกอบ @Relation และคลาส POJO ช่วยเหลือพร้อม @Transaction สำหรับคำสั่ง join ที่มีประสิทธิภาพ
Navigation Component — ไลบรารี Jetpack สำหรับจัดการการเปลี่ยนระหว่างหน้าจอ แทนที่จะเรียก FragmentTransaction ด้วยตนเอง นักพัฒนาสร้างกราฟนำทาง (ไฟล์ XML ที่มีโหนดปลายทาง) และระบบจะสร้างคลาส Directions พร้อมเมธอดการเปลี่ยนที่ปลอดภัยชนิด Navigation Component รับประกันการทำงานที่ถูกต้องของ back stack, deep links และการส่งอาร์กิวเมนต์ระหว่างหน้าจอ
// nav_graph.xml
//
// android:name=".ProfileFragment">
//
// android:defaultValue="-1"
// app:argType="integer" />
//
// ในโค้ด fragment:
class ProfileFragment : Fragment() {
private val args: ProfileFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
loadProfile(args.userId)
}
}
อาร์กิวเมนต์ userId ถูกส่งในกราฟนำทางพร้อมการระบุชนิด (integer) และค่าเริ่มต้น คลาส ProfileFragmentArgs ถูกสร้างขึ้นโดยอัตโนมัติโดยปลั๊กอิน Navigation Safe Args — ประกอบด้วยอาร์กิวเมนต์ทั้งหมดพร้อมชนิด Kotlin ที่ถูกต้อง Deep links ถูกกำหนดค่าในกราฟ: app:deepLink="app://profile/{userId}" Navigation Component จะแยกวิเคราะห์ URL และสร้าง back stack ราวกับว่าผู้ใช้ได้นำทางผ่านอินเทอร์เฟซ
Navigation Component ผสานรวมกับ BottomNavigationView ผ่าน NavController: แต่ละรายการเมนูเชื่อมโยงกับปลายทางในกราฟ การสลับระหว่างแท็บจะไม่สร้าง fragment ใหม่ — Navigation Component เก็บสถานะผ่าน NavBackStackEntry สำหรับการนำทางแบบมีเงื่อนไข (แสดงหน้าเข้าสู่ระบบหากไม่ได้รับการรับรองความถูกต้อง) จะใช้ navController.navigate(condition) พร้อมการตรวจสอบใน onCreate
AndroidX คือสถาปัตยกรรมที่ออกแบบใหม่ของ Support Library ซึ่งแต่ละไลบรารีได้รับอาร์ติแฟกต์ของตนเองพร้อมเวอร์ชันอิสระ แทนที่ com.android.support:appcompat-v7:28.0.0 เพียงตัวเดียว AndroidX มีให้เลือก androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0 และอื่น ๆ ซึ่งช่วยขจัดปัญหาที่การพึ่งพาต่าง ๆ ดึง Support Library คนละเวอร์ชันทำให้เกิดความขัดแย้ง
การโยกย้ายไปยัง AndroidX ทำได้โดยอัตโนมัติใน Android Studio 3.2+ ผ่านเมนู Refactor → Migrate to AndroidX Studio จะแทนที่การนำเข้าทั้งหมดในไฟล์ Java/Kotlin, manifest และทรัพยากร ความเข้ากันได้ย้อนหลัง คือข้อได้เปรียบหลักของ AndroidX: ไลบรารีทำงานบน Android 5.0 (API 21) ขึ้นไป ครอบคลุม 97% ของอุปกรณ์ที่ใช้งานอยู่ตาม Google Play Console (2025)
อาร์ติแฟกต์ที่ใช้บ่อยที่สุด: appcompat (ธีมมืด, Material Design บน API เก่า), recyclerview (รายการปรับเปลี่ยนได้พร้อม ViewHolder), constraintlayout (คอนเทนเนอร์ยืดหยุ่นพร้อมลำดับชั้นแบบราบ), cardview (การ์ด Material Design), preference (หน้าจอการตั้งค่าพร้อมสไตล์ Material) แต่ละอาร์ติแฟกต์มีการกำหนดเวอร์ชันอิสระช่วยเร่งการส่งมอบการแก้ไขโดยไม่ต้องอัปเดตทั้งแพ็คเกจ
นอกเหนือจาก Architecture และ AndroidX แล้ว Jetpack ยังรวมไลบรารีเฉพาะทางมากมายสำหรับงานพัฒนามือถือทั่วไป WorkManager — สำหรับงานเบื้องหลังที่มีการดำเนินการรับประกัน (การซิงโครไนซ์ การอัปโหลดบันทึก) รองรับงานเป็นระยะและงานที่เลื่อนออกไป รวมถึงข้อจำกัดด้านเครือข่ายและแบตเตอรี่ DataStore — ตัวแทน SharedPreferences ที่ใช้ coroutine รองรับคุณสมบัติแบบชนิด (Preferences DataStore) และ Protocol Buffers (Proto DataStore)
แต่ละไลบรารีมี SDK ขั้นต่ำและอาร์ติแฟกต์ของตนเอง Google เผยแพร่เวอร์ชันหลักปีละครั้ง (พร้อมกับการเปิดตัว Android) และแพตช์ความปลอดภัยรายไตรมาส คำแนะนำ — ให้รวมเฉพาะไลบรารีที่จำเป็นเพื่อไม่ให้ขนาด APK เพิ่มขึ้น คอลเล็กชัน Jetpack เต็มรูปแบบ (อาร์ติแฟกต์ทั้งหมด) มีน้ำหนักกว่า 20 MB แต่แอปทั่วไปใช้ 5–7 ไลบรารี เพิ่ม 3–5 MB ให้กับ APK
คำถามที่พบบ่อย
ใช่ Google หยุดรองรับ Support Library ในปี 2019 ไลบรารี Jetpack ใหม่ทั้งหมดและ Google Play Services ต้องการ AndroidX การโยกย้ายใช้เวลา 30–60 นาทีผ่าน Android Studio
Jetpack เข้ากันได้อย่างสมบูรณ์กับ Java อย่างไรก็ตาม ฟีเจอร์มากมาย (viewModelScope, coroutine, Compose) มีให้ใช้เฉพาะใน Kotlin เท่านั้น Google แนะนำ Kotlin สำหรับโปรเจกต์ใหม่
ViewModel เก็บวัตถุในหน่วยความจำและทนต่อการหมุน onSaveInstanceState เหมาะสำหรับชนิดดั้งเดิมที่ซีเรียลไลซ์ได้ (Bundle) เท่านั้น ViewModel จะไม่ถูกเก็บรักษาเมื่อกระบวนการถูกฆ่า — สำหรับสิ่งนั้นจำเป็นต้องใช้ SavedStateHandle
WorkManager — สำหรับงานที่ต้องดำเนินการแม้หลังจากปิดแอป: การซิงโครไนซ์ การอัปโหลดบันทึก การส่งข้อมูลวิเคราะห์ Coroutine — สำหรับงานที่ผูกกับหน้าจอ
แทนที่การนำเข้า SharedPreferences ด้วย DataStoredataStore.data.first() (suspend) เขียนผ่าน dataStore.edit { ... } DataStore เป็นแบบอะซิงโครนัสและป้องกัน ANR
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ