Jetpack — nó là gì, các thành phần kiến trúc

Tác giả: IT Sectr Đã đăng: 2026-05-01 Thời gian đọc: 9 phút

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 — bộ hơn 50 thư viện giúp tăng tốc phát triển ứng dụng Android và đảm bảo tương thích ngược qua AndroidX.
  • ViewModel chịu được xoay màn hình và bảo toàn dữ liệu khi Activity được tạo lại, ngăn mất thông tin người dùng nhập.
  • Room — lớp ORM trên SQLite với kiểm tra truy vấn SQL lúc biên dịch và hỗ trợ coroutine.
  • Navigation Component quản lý chuyển tiếp giữa các màn hình qua đồ thị điều hướng với đối số an toàn kiểu.
  • Lifecycle cho phép phản ứng với sự kiện vòng đời Activity/Fragment mà không cần mã boilerplate trong controller.

Android Jetpack là gì?

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.

Triết lý Jetpack

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.

AndroidX làm nền tảng

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.

Các thành phần kiến trúc: ViewModel, Lifecycle, LiveData

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).

kotlin
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 và coroutine

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àm việc với cơ sở dữ liệu trên Android

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.

kotlin
@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 đồ.

TypeConverters và quan hệ

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.

kotlin
// 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.

Điều hướng dưới cùng và điều hướng có điều kiệ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: Support Library thế hệ mới

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 AndroidX chính

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.

Các thư viện Jetpack quan trọng khác

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).

  • Hilt — framework DI dựa trên Dagger, đơn giản hóa tiêm phụ thuộc qua chú thích @HiltViewModel, @Inject, @Module. Tích hợp sẵn với ViewModel và Navigation.
  • Paging 3 — thư viện tải dữ liệu phân trang từ mạng/DB với hỗ trợ RemoteMediator (mạng + bộ nhớ đệm), StateFlow và Compose.
  • CameraX — API làm việc với camera, trừu tượng hóa khác biệt nhà sản xuất (Samsung, Xiaomi, Honor) qua giao diện CameraController thống nhất.
  • Security Crypto — mã hóa dữ liệu qua EncryptedSharedPreferences và EncryptedFile dựa trên AES-256 với khóa chính trong Android Keystore.

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

Tôi có cần di chuyển từ Support Library sang AndroidX không?

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.

Có thể sử dụng Jetpack với Java hay chỉ với Kotlin?

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 khác onSaveInstanceState như thế nào?

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 đó.

Khi nào sử dụng WorkManager thay vì coroutine?

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.

Làm thế nào để di chuyển từ SharedPreferences sang DataStore?

Thay thế import SharedPreferences bằng DataStore. Đọc qua dataStore.data.first() (suspend), ghi qua dataStore.edit { ... }. DataStore không đồng bộ và được bảo vệ khỏi ANR.

Tóm tắt

  • Android Jetpack — bộ hơn 50 thư viện phát triển Android, hợp nhất dưới AndroidX với tương thích ngược đến API 21.
  • ViewModel chịu được xoay màn hình và bảo toàn dữ liệu UI, trong khi Lifecycle thông báo cho thành phần về thay đổi trạng thái Activity/Fragment.
  • Room — ORM an toàn kiểu trên SQLite với kiểm tra truy vấn lúc biên dịch, di chuyển và hỗ trợ coroutine.
  • Navigation Component quản lý chuyển tiếp qua đồ thị với đối số an toàn kiểu và deep link tự động.
  • WorkManager đảm bảo thực thi tác vụ nền ngay cả sau khi đóng ứng dụng; DataStore thay thế SharedPreferences.
  • Jetpack được chia thành bốn loại: Architecture, UI, Behavior, Foundation — mỗi loại bao phủ lớp ứng dụng riêng.
  • Ứng dụng dùng Jetpack có ít hơn 30% lỗi liên quan đến vòng đời và phát triển nhanh hơn nhờ giải pháp kiến trúc có sẵn.

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.

Thảo luận dự án

Đọc thêm