Jetpack là một bộ thư viện Android của Google giúp đơn giản hóa việc phát triển và tăng tốc tạo ứng dụng ổn định. Các thành phần như ViewModel, Room và Navigation giải quyết các tác vụ điển hình: quản lý vòng đời, lưu trữ dữ liệu và điều hướng. Theo Android Developers (2026), Jetpack bao phủ hơn 50 thư viện, mỗi thư viện tương thích ngược với Android 5.0 (API 21) thông qua AndroidX — thư viện tương thích đã thay thế Support Library.
Những điểm chính
Android Jetpack là bộ sưu tập thư viện, công cụ và hướng dẫn kiến trúc từ Google, được giới thiệu vào năm 2018 tại Google I/O. Jetpack đã thay thế Support Library và Android Architecture Components, hợp nhất chúng thành một hệ sinh thái duy nhất. Trước Jetpack, mỗi thư viện Android được cập nhật độc lập, gây ra xung đột phiên bản. Jetpack đã đồng bộ hóa các phiên bản dưới một mã định danh AndroidX duy nhất và giới thiệu mô hình phiên bản chính ổn định với các bản vá nhỏ.
Các thư viện Jetpack được chia thành bốn loại: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat). Mỗi loại giải quyết các tác vụ của một lớp ứng dụng cụ thể — từ quản lý dữ liệu đến giao diện người dùng.
Google thúc đẩy ba nguyên tắc Jetpack: accelerate development (ít boilerplate hơn, nhiều logic nghiệp vụ hơn), eliminate boilerplate (ViewModel loại bỏ lưu trạng thái thủ công, Room loại bỏ việc viết SQLiteOpenHelper) và build with confidence (mỗi thư viện vượt qua hơn 15.000 bài kiểm tra trước khi phát hành). Theo Android Developers (2026), ứng dụng dùng Jetpack có ít hơn 30% lỗi liên quan đến vòng đời.
Tất cả thư viện Jetpack được phân phối dưới mã định danh AndroidX (các artifact như androidx.*). AndroidX đã thay thế Support Library (các artifact như com.android.support.*), chia thư viện nguyên khối thành các artifact mô-đun với phiên bản độc lập. Di chuyển sang AndroidX được thực hiện qua tùy chọn android.useAndroidX=true trong gradle.properties — Android Studio tự động chuyển đổi import.
ViewModel là thành phần trung tâm của kiến trúc Jetpack, lưu trữ dữ liệu UI. Không giống như Activity bị hủy khi xoay màn hình, ViewModel vẫn tồn tại trong bộ nhớ. Người dùng điền biểu mẫu, xoay điện thoại — dữ liệu không bị mất. ViewModel tự động được dọn dẹp khi LifecycleOwner (Activity hoặc Fragment) kết thúc vòng đời vĩnh viễn (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("Màn hình đã khởi động")
}
}
LiveData — vùng chứa dữ liệu có thể quan sát, tôn trọng vòng đời. Nếu màn hình không hiển thị (onStop), LiveData không gửi cập nhật — điều này ngăn rò rỉ bộ nhớ và lỗi khi cố gắng cập nhật Activity không tồn tại. Lifecycle — lớp lưu trạng thái hiện tại (CREATED, STARTED, RESUMED) và cho phép các thành phần khác đăng ký thay đổi trạng thái. Cùng nhau, ViewModel, LiveData và Lifecycle tạo nên nền tảng của kiến trúc phản ứng Android.
viewModelScope — CoroutineScope tích hợp, gắn với vòng đời ViewModel. Tất cả coroutine khởi chạy trong scope này tự động bị hủy khi ViewModel được dọn dẹp. Điều này loại bỏ việc quản lý thủ công Disposable và CompositeDisposable trong mỗi ViewModel. Để làm việc với viewModelScope, cần phụ thuộc androidx.lifecycle:lifecycle-viewmodel-ktx.
Room là thư viện ORM của Jetpack cung cấp lớp trừu tượng trên SQLite. Thay vì viết truy vấn SQL thô và chuyển đổi Cursor thủ công thành đối tượng, nhà phát triển khai báo Entity (bảng), DAO (Đối tượng truy cập dữ liệu) và Database (điểm vào). Room kiểm tra truy vấn SQL lúc biên dịch qua chú thích @Query — nếu bảng hoặc cột không tồn tại, bản dựng thất bại với lỗi rõ ràng.
@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 mô tả bảng với ba cột. DAO khai báo hàm suspend để làm việc với coroutine — truy vấn được thực thi tự động trên luồng nền. Room hỗ trợ di chuyển qua chú thích @Migration: nhà phát triển mô tả script SQL chuyển đổi giữa các phiên bản và Room thực thi nó mà không mất dữ liệu. Nếu không có di chuyển, Room ném IllegalStateException — điều này bảo vệ dự án khỏi mất dữ liệu ngẫu nhiên khi cập nhật lược đồ.
Room chỉ lưu kiểu nguyên thủy và trình bao bọc của chúng. Để lưu danh sách, Date hoặc đối tượng tùy chỉnh, sử dụng @TypeConverter — phương thức tĩnh chuyển đổi kiểu thành String (JSON) hoặc Long (timestamp). Quan hệ giữa các bảng được mô hình hóa qua đối tượng lồng nhau với chú thích @Relation và lớp POJO trợ giúp với @Transaction cho truy vấn join hiệu quả.
Navigation Component — thư viện Jetpack để quản lý chuyển tiếp giữa các màn hình. Thay vì gọi thủ công FragmentTransaction, nhà phát triển tạo đồ thị điều hướng (tệp XML với nút đích) và hệ thống tạo lớp Directions với phương thức chuyển tiếp an toàn kiểu. Navigation Component đảm bảo hoạt động chính xác của ngăn xếp quay lại, deep link và truyền đối số giữa các màn hình.
// nav_graph.xml
//
// android:name=".ProfileFragment">
//
// android:defaultValue="-1"
// app:argType="integer" />
//
// Trong mã fragment:
class ProfileFragment : Fragment() {
private val args: ProfileFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
loadProfile(args.userId)
}
}
Các đối số userId được truyền trong đồ thị điều hướng với chỉ định kiểu (integer) và giá trị mặc định. Lớp ProfileFragmentArgs được tạo tự động bởi plugin Navigation Safe Args — nó chứa tất cả đối số với kiểu Kotlin chính xác. Deep link được cấu hình trong đồ thị: app:deepLink="app://profile/{userId}". Navigation Component tự phân tích URL và tạo ngăn xếp quay lại như thể người dùng đã điều hướng qua giao diện.
Navigation Component tích hợp với BottomNavigationView qua NavController: mỗi mục menu được liên kết với một đích trong đồ thị. Chuyển đổi giữa các tab không tạo lại fragment — Navigation Component bảo toàn trạng thái qua NavBackStackEntry. Cho điều hướng có điều kiện (hiển thị đăng nhập nếu chưa xác thực), sử dụng navController.navigate(condition) với kiểm tra trong onCreate.
AndroidX là kiến trúc được thiết kế lại của Support Library, trong đó mỗi thư viện nhận artifact riêng với phiên bản độc lập. Thay vì một com.android.support:appcompat-v7:28.0.0 duy nhất, AndroidX cung cấp androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0, v.v. Điều này loại bỏ vấn đề các phụ thuộc khác nhau kéo các phiên bản Support Library khác nhau, gây xung đột.
Di chuyển sang AndroidX được thực hiện tự động trong Android Studio 3.2+ qua menu Refactor → Migrate to AndroidX. Studio thay thế tất cả import trong tệp Java/Kotlin, tệp kê khai và tài nguyên. Tương thích ngược là lợi thế chính của AndroidX: các thư viện hoạt động trên Android 5.0 (API 21) trở lên, bao phủ 97% thiết bị đang hoạt động theo Google Play Console (2025).
Các artifact được sử dụng nhiều nhất: appcompat (chủ đề tối, Material Design trên API cũ), recyclerview (danh sách thích ứng với ViewHolder), constraintlayout (vùng chứa linh hoạt với phân cấp phẳng), cardview (thẻ Material Design), preference (màn hình cài đặt với kiểu Material). Mỗi artifact được đánh phiên bản độc lập, tăng tốc phân phối bản sửa mà không cần cập nhật toàn bộ gói.
Ngoài Architecture và AndroidX, Jetpack bao gồm nhiều thư viện chuyên biệt cho các tác vụ phát triển di động điển hình. WorkManager — cho tác vụ nền với thực thi đảm bảo (đồng bộ hóa, tải log lên), hỗ trợ tác vụ định kỳ và trì hoãn, cũng như ràng buộc mạng và pin. DataStore — thay thế cho SharedPreferences dựa trên coroutine, hỗ trợ thuộc tính có kiểu (Preferences DataStore) và Protocol Buffers (Proto DataStore).
Mỗi thư viện có SDK tối thiểu và artifact riêng. Google phát hành phiên bản chính mỗi năm một lần (trùng với bản phát hành Android) và bản vá bảo mật hàng quý. Khuyến nghị — chỉ bao gồm các thư viện cần thiết để tránh tăng kích thước APK. Bộ sưu tập Jetpack đầy đủ (tất cả artifact) nặng hơn 20 MB, nhưng ứng dụng điển hình sử dụng 5–7 thư viện, thêm 3–5 MB vào APK.
Câu hỏi thường gặp
Có, Google đã ngừng hỗ trợ Support Library vào năm 2019. Tất cả thư viện Jetpack mới và Google Play Services yêu cầu AndroidX. Việc di chuyển mất 30–60 phút qua Android Studio.
Jetpack hoàn toàn tương thích với Java. Tuy nhiên, nhiều tính năng (viewModelScope, coroutine, Compose) chỉ khả dụng trên Kotlin. Google khuyến nghị Kotlin cho các dự án mới.
ViewModel lưu trữ đối tượng trong bộ nhớ và chịu được xoay. onSaveInstanceState chỉ phù hợp cho kiểu nguyên thủy có thể tuần tự hóa (Bundle). ViewModel không được bảo toàn khi tiến trình bị giết — cần SavedStateHandle cho việc đó.
WorkManager — cho tác vụ phải thực thi ngay cả sau khi đóng ứng dụng: đồng bộ hóa, tải log lên, gửi phân tích. Coroutine — cho tác vụ gắn với màn hình.
Thay thế import SharedPreferences bằng DataStoredataStore.data.first() (suspend), ghi qua dataStore.edit { ... }. DataStore không đồng bộ và được bảo vệ khỏi ANR.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm