+8

What's new in Jetpack?

Android Jetpack là một bộ thư viện, công cụ và hướng dẫn để giúp các developers làm theo các phương pháp hay nhất, giảm số lượng dòng code, tối ưu hóa hệ thống, xây dựng úng dụng một cách nhanh chóng, giúp hoạt động nhất quán trên các phiên bản và thiết bị Android,... Ngày nay, có đến 84% trong số 1000 ứng dụng hàng đầu trên Google Play dựa vào Jetpack. Như vậy đã cho thấy tầm quan trọng, độ ảnh hưởng của bộ thư viện này như thế nào.

image.png

Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu phiên bản cập nhật mới nhất của Jetpack xem có những gì mới mẻ và thú vị nhé. Ok bắt đầu thôi 😄

1. New in Stable

1.1 CameraX

  • CameraX - version 1.0.1 được xây dựng để giúp bạn phát triển ứng dụng Camera dễ dàng hơn. Nó cung cấp các API nhất quán và dễ sử dụng, hoạt động trên hầu hết các thiết bị Android, có khả năng tương thích với Android 5.0 (API level 21).

  • Một số cải tiến mới nhất đối với thư viện đó là:

    • Hỗ trợ điều chỉnh bù phơi sáng, truy cập thông tin chi tiết hơn về trạng thái và tính năng của máy ảnh.
    • Phạm vi FPS hiện có thể được thay đổi thông qua Camera2Interop trong khi máy ảnh đang chạy.
    • Hỗ trợ cho các tính năng mới nhất của các thiết bị và hệ điều hành, bao gồm xem trước dải động cao, điều khiển tỷ lệ thu phóng và hỗ trợ chế độ không làm phiền của Android.
    • Giải quyết hiệu suất, dẫn đến việc chụp ảnh nhanh hơn và khởi tạo nhanh hơn, đặc biệt là trên các thiết bị cũ.

1.2 Hilt

  • Hilt - version 1.0.0 là một dependency injection (DI) library dành cho Android được xây dựng dựa trên Dagger giúp cho các developers thực hiện việc khởi tạo các class có sự phụ thuộc với nhau trở nên dễ dàng hơn.
  • Là một phần của quá trình chuyển đổi sang ổn định, Hilt hiện được tích hợp với Navigation và Compose: bạn có thể có annotated @HiltViewModel được đưa vào phạm vi điểm đến hoặc chính navigation graph.

1.3 Paging 3.0

  • Paging - version 3.0.1 giúp bạn tải và hiển thị khối nhỏ dữ liệu từ một tập dữ liệu lớn hơn từ bộ nhớ cục bộ hoặc qua mạng, nó giúp ứng dụng của bạn sử dụng tài nguyên mạng và hệ thống hiệu quả hơn.
  • Lợi ích khi chuyển sang Paging 3.0:
    • Viết lại hoàn toàn trong Kotlin với hỗ trợ tốt nhất cho các Coroutines và Flow, tải không đồng bộ với RxJava và Guava.
    • Cải tiến tổng thể đối với các lớp repository, phân tách danh sách, chuyển đổi trang tùy chỉnh cũng như tải đầu trang và cuối trang.
    • Trạng thái tải tích hợp và các tín hiệu lỗi cho thiết kế giao diện người dùng đáp ứng, bao gồm chức năng thử lại và làm mới.
  • Bản phát hành 3.0 là một cải tiến đáng kể về khả năng sử dụng so với Paging 2.0 và việc viết lại đã được lên kế hoạch với sự di chuyển từng phần và theo giai đoạn để các developers có thể chuyển đổi theo ý của riêng họ.

1.4 ConstraintLayout và MotionLayout

  • ConstraintLayout - version 2.1.0 rất linh hoạt trong việc thiết kế layout. MotionLayout - version 2.0.0 là một lớp con của ConstraintLayout, rất mạnh mẽ trong việc tạo animation.
  • ConstraintLayout được cải tiến tốt hơn về performance, đồng thời có cách mới để thiết lập với các màn hình phức tạp với VirtualLayouts và Flow.
  • MotionLayout cho phép bạn dễ dàng điều phối các animation của multiple views. Tất cả những điều này được thực hiện bằng cách sử dụng các animation có thể tìm kiếm và đảo ngược dễ dàng điều khiển từ gestures hoặc thậm chí là programmatically.
  • MotionLayout hiện bao gồm hỗ trợ cho các thiết bị có thể gập lại, image filters và motion effects (liên quan đến các hiệu ứng chuyển động).

1.5 Security Crypto

  • Security Crypto - version 1.0.0 cung cấp việc triển khai các phương pháp bảo mật tốt nhất liên quan đến việc đọc và ghi dữ liệu ở chế độ nghỉ, cũng như tạo và xác minh khóa (SharedPreferences).
  • Để mã hóa SharedPreferences, hãy tạo một EncryptedSharedPreferences đối tượng với khóa và lược đồ thích hợp, sau đó sử dụng nó như một đối tượng SharedPreferences.
    val prefs: SharedPreferences = EncryptedSharedPreferences.create(
            context,
            "prefs_file_name",
            mainKey,
            prefKeyEncryptionScheme = AES256_SIV,
            prefValueEncryptionScheme = AES256_GCM,
    )
    // Use the resulting SharedPreferences object as usual.
    prefs.edit()
        .putBoolean("show_completed", true)
        .apply()
    

1.6 Fragment

  • Trong nhiều năm qua, thư viện Fragment - version 1.4.0-alpha06 đã không ngừng nỗ lực lớn để làm sạch quá trình triển khai, giúp các developer dễ dàng làm theo các phương pháp hay nhất, gọn gàng nhất, hiệu quả nhất và giúp việc UnitTest trở nên dễ dàng hơn.
  • Trong bản phát hành gần đây thư viện đã hỗ trợ trong việc keep state, xử lý backstack của fragment trong Navigation. Bên cạnh đó thư viện hỗ trợ ActivityResult tích hợp, giúp đăng ký kết quả Activity từ một Fragment.
  • Fragment cũng đã thêm FragmentOnAttachListener interface thay thế cho phương thức onAttachFragment. Phương thức ghi đè này vẫn được sử dụng trong Fragment hoặc FragmentActivity nhưng đã bị declared thay vào đó hãy sử dụng cách tiếp cận sau:
    // Obtain the fragment manager. May be a childFragmentManager,
    // if in a fragment, to observe child attachment.
    val fm = supportFragmentManager
    
    val listener = FragmentOnAttachListener {
        fragmentManager, fragment ->
      // Respond to the fragment being attached.
    }
    
    fm.addFragmentOnAttachListener(listener)
    

2. New in Beta

2.1 DataStore

  • DataStore - version 1.0.0 cung cấp một giải pháp lưu trữ dữ liệu mạnh mẽ nhằm giải quyết những thiếu sót của SharedPreferences trong khi vẫn duy trì một bề mặt API đơn giản, có khả năng sử dụng cao.
  • DataStore hỗ trợ các phương pháp hay nhất như Kotlin coroutines với Flow và RxJava để lưu giữ liệu không đồng bộ.
  • DataStore cho phép bạn lưu trữ các cặp key-value, thông qua Preference DataStore hoặc các đối tượng đã nhập được hỗ trợ bởi bộ đệm giao thức, thông qua Proto DataStore. Bạn cũng có thể cắm vào giải pháp serialization của riêng bạn, như Kotlin serialization.

3. New in Alpha

3.1 AppSearch

  • AppSearch - version 1.0.0-alpha03 là một thư viện tìm kiếm trên thiết bị mới cung cấp chức năng tìm kiếm toàn văn bản giàu tính năng và hiệu suất cao. So với SQLite, AppSearch hỗ trợ nhiều ngôn ngữ trên thế giới, đơn giản hóa kết quả truy vấn và cung cấp độ trễ thấp hơn cho việc lập chỉ mục và tìm kiếm trên các tập dữ liệu lớn.
  • AppSearch được phát hành với hỗ trợ LocalStorage, cho phép ứng dụng của bạn quản lý dữ liệu có cấu trúc, được gọi là “documents”, sau đó truy vấn trên đó.
  • Trong Android S, AppSearch cũng sẽ cung cấp PlatformStorage để bạn có thể chia sẻ dữ liệu ứng dụng của mình với các ứng dụng khác một cách an toàn và giảm kích thước nhị phân của ứng dụng bằng cách không phải liên kết các thư viện gốc bổ sung. Tính năng này hiện không khả dụng trong Jetpack vì thư viện chưa nhắm mục tiêu SDK Android S.

3.2 Room

  • Room - version 2.4.0-alpha04 là lớp lưu trữ dữ liệu được khuyến khích sử dụng hơn là SQLite, nó giúp tăng khả năng truy vấn, lưu trữ dữ liệu có cấu trúc dưới local và cực kỳ an toàn.

  • Room 2.4.0-alpha hỗ trợ tính năng Auto-migrations (tự động di chuyển). Khi cấu trúc cơ sở dữ liệu của bạn thay đổi, bây giờ bạn khai báo @AutoMigration và cho biết bạn muốn di chuyển từ phiên bản nào sang phiên bản nào và Room sẽ tạo di chuyển cho bạn (ví dụ muốn thêm cột, xóa hoặc thêm bảng mới,...). Đối với những lần di chuyển phức tạp hơn, bạn vẫn có thể sử dụng Migration class giống như các phiên bản trước.

    @Database(
       version = 2,
       entities = [ GoodDoggos.class ],
       autoMigrations = [
            AutoMigration (
                from = 1, 
                to = 2,
                spec = DoggosDatabase.DoggosAutoMigration::class
           )
        ]
    )
    
    abstract class DoggosDatabase : RoomDatabase {
      //@DeleteTable, @DeleteColumn,...
      @RenameTable(fromTableName = "Doggos", toTableName = "GoodDoggos")
        class DoggosAutoMigration: AutoMigrationSpec {   }
    }
    
  • Bạn hoàn toàn có thể kết hợp cả Migrations và Auto-migrations. Ví dụ: di chuyển từ phiên bản 1 sang phiên bản 2 có thể được thực hiện bằng cách sử dụng Migrations, phiên bản 2 sang phiên bản 3 sử dụng Auto-migrations,...

3.3 WorkManager

  • WorkManager - version 2.7.0-alpha05 là một API giúp bạn dễ dàng lên lịch các tác vụ không đồng bộ, dự kiến sẽ chạy ngay cả khi ứng dụng thoát hoặc thiết bị khởi động lại.

  • Các phiên bản mới nhất của WorkManager có tính năng hỗ trợ cải thiện cho các ứng dụng multi-process, bao gồm các lợi ích về hiệu suất từ việc thống nhất lập lịch yêu cầu công việc thành một quy trình duy nhất và hạn chế tăng trưởng cơ sở dữ liệu khi lập lịch nhiều yêu cầu.

  • Phiên bản 2.7 - hiện đang ở dạng alpha, được nhắm mục tiêu đến Android S SDK - cung cấp hỗ trợ bổ sung cho các hạn chế nền mới của nền tảng.

  • Trình kiểm tra tác vụ nền có sẵn trong Android Studio Arctic Fox (phiên bản mới nhất của Android Studio), cho phép bạn dễ dàng xem và gỡ lỗi công việc WorkManager khi sử dụng phiên bản mới nhất của thư viện:

    image.png

3.4 Navigation

  • Navigation - version 2.4.0-alpha06 giúp việc điều hướng, giao tiếp giữa các màn hình trở nên nhanh gọn và dễ dàng hơn. Trong phiên bản alpha gần đây thì thư viện đã hỗ trợ xử lý cho nhiều backstacks và keep state của các fragment, chẳng hạn khi làm việc với Bottom Navigation, Navigation Drawer,...

3.5 Macrobenchmark

  • Thư viện Macrobenchmark mở rộng phạm vi đo điểm chuẩn của Jetpack để khởi động ứng dụng và các hành vi tích hợp liên quan đến performance. Thư viện có thể được sử dụng từ xa để theo dõi các chỉ số trong thử nghiệm tích hợp liên tục hoặc cục bộ với kết quả có thể xem được từ Android Studio.
  • Đối với các nhà phát triển muốn tích hợp chặt chẽ hơn với Google Assistant, thư viện Google Shortcuts - version 1.0.0 cung cấp một cách để hiển thị các hành động với Google Assistant và các Dịch vụ khác của Google thông qua ShortcutInfo lớp hiện có. Bạn có thể gửi tối đa 15 phím tắt cùng một lúc thông qua tính năng ShortcutManager được hiển thị trên Google Assistant, trong số các dịch vụ khác, giúp chúng khả dụng cho các tương tác về giọng nói và các tương tác khác. Để thực hiện điều này, điều quan trọng nhất là hãy định nghĩa một lối tắt có Explicit intent và cung cấp các thông tin có ý nghĩa về mặt ngữ nghĩa sẽ giúp các dịch vụ của Google tìm ra cách tốt nhất để hiển thị thông tin đó cho người dùng.
    // expose a "Cappuccino" action to Google Assistant and other services
    ShortcutInfoCompat siCompat =
      ShortcutInfoCompat.Builder(ctx, "id_cappuccino")
        .setShortLabel("Cappuccino")
        .setIntent(Intent(ctx, OrderCappuccino::class.java))
        .addCapabilityBinding(
            "actions.intent.ORDER_MENU_ITEM",
            "menuItem.name",
            asList("cappuccino")
        )
        .build()
    
    ShortcutManagerCompat.pushDynamicShortcut(ctx, siCompat)
    

3.6 EmojiCompat

  • Tất cả nội dung do người dùng tạo trong ứng dụng của bạn đều chứa 🎉 và việc hỗ trợ biểu tượng cảm xúc hiện đại là một phần quan trọng tạo nên ứng dụng của bạn ✨. EmojiCompat hỗ trợ biểu tượng cảm xúc hiện đại trên API 19 và cao hơn, thư viện mới thêm cấu hình tự động bằng cách sử dụng thư viện AppStartup (bạn không phải thêm bất kỳ mã nào để hiển thị những emoji đẹp như thế này 🐻‍❄️)
  • AppCompat thêm emoji2 bắt đầu với AppCompat 1.4. Nếu ứng dụng của bạn sử dụng AppCompat, người dùng sẽ thấy biểu tượng cảm xúc hiện đại ⭐ mà không cần cấu hình thêm, ví dụ AppCompatEditText, AppCompatTextView,...Các ứng dụng không sử dụng AppCompat có thể thêm thư viện này vào để sử dụng.

3.7 Jetpack Compose

  • Jetpack Compose - version 1.0.0 là bộ công cụ hiện đại của Android để xây dựng giao diện người dùng gốc. Nó đơn giản hóa và tăng tốc phát triển giao diện người dùng trên Android.
  • Nhiều thư viện được liệt kê ở đây, cũng như các thư viện khác mà bạn có thể đang sử dụng, đã giới thiệu các tính năng đặc biệt để tích hợp với Jetpack Compose. Từ Activity đến ViewModel, Navigation hoặc Hilt, tất cả các thư viện này có thể giúp cho việc áp dụng Compose trong ứng dụng của bạn trở nên mượt mà hơn.

3.8 Form factors

  • Jetpack giúp làm việc dễ dàng hơn với các kiểu dáng màn hình khác nhau, bao gồm thiết bị có thể gập lại, thiết bị màn hình lớn và thiết bị Wear. Các kỹ sư android đã giới thiệu các nguyên tắc mới để phát triển màn hình lớn cùng với các cải tiến cho thư viện Jetpack chẳng hạn như WindowManager và SlidingPaneLayout, chi tiết.

4. Kết luận

  • Trên đây là tổng quan nhanh về những gì mới có trong Android Jetpack. Trong giới hạn bài viết thì mình sẽ không đi sâu vào cách sử dụng, triển khai chi tiết. Các bạn có thể import thư viện và làm theo document để trải nghiệm những tính năng mới của từng thư viện nhé 😄. Cảm ơn các bạn đã đọc bài viết của mình ❤️ hẹn gặp các bạn trong bài viết tiếp theo.
  • Link tham khảo: https://android-developers.googleblog.com/2021/05/whats-new-in-jetpack.html

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí