Tin tức về sản phẩm

Room 3.0 – Hiện đại hoá Room

Đọc trong 4 phút
Daniel Santiago Rivera
Kỹ sư phần mềm

Phiên bản alpha đầu tiên của Room 3.0 đã được phát hành! Room 3.0 là một phiên bản chính có thể gây lỗi của thư viện, tập trung vào Kotlin Multiplatform (KMP) và bổ sung tính năng hỗ trợ cho JavaScript và WebAssembly (WASM) trên nền tảng hỗ trợ hiện có cho Android, iOS và máy tính JVM. 

Trong blog này, chúng tôi sẽ trình bày những thay đổi có thể gây lỗi, lý do đằng sau Room 3.0 và nhiều việc bạn có thể làm để di chuyển từ Room 2.0.

Thay đổi có thể gây lỗi

Room 3.0 bao gồm các thay đổi có thể gây lỗi sau đây về API: 

  • Loại bỏ API SupportSQLite: Room 3.0 được hỗ trợ đầy đủ bởi API trình điều khiển androidx.sqlite. API SQLiteDriver tương thích với KMP và việc loại bỏ phần phụ thuộc của Room vào API của Android sẽ đơn giản hoá giao diện API cho Android vì tránh được việc có 2 phần phụ trợ có thể có.
  • Không còn tạo mã Java: Room 3.0 chỉ tạo mã Kotlin. Điều này phù hợp với mô hình ưu tiên Kotlin đang phát triển, đồng thời đơn giản hoá cơ sở mã và quy trình phát triển, cho phép lặp lại nhanh hơn.
  • Tập trung vào KSP: Chúng tôi cũng đang loại bỏ tính năng hỗ trợ cho Xử lý chú giải Java (AP) và KAPT. Room 3.0 chỉ là một trình xử lý KSP (Kotlin Symbol Processing), cho phép xử lý tốt hơn các cơ sở mã Kotlin mà không bị giới hạn bởi ngôn ngữ Java.
  • Ưu tiên coroutine: Room 3.0 áp dụng coroutine Kotlin, giúp các API của coroutine trở thành ưu tiên hàng đầu. Coroutine là khung không đồng bộ tương thích với KMP và việc làm cho Room trở thành không đồng bộ theo bản chất là một yêu cầu quan trọng để hỗ trợ các nền tảng web.

Gói mới

Để ngăn chặn các vấn đề về khả năng tương thích với các phương thức triển khai Room 2.x hiện có và đối với các thư viện có phần phụ thuộc bắc cầu vào Room (ví dụ: WorkManager), Room 3.0 nằm trong một gói mới, có nghĩa là gói này cũng có một nhóm maven và mã cấu phần phần mềm mới. Ví dụ: androidx.room:room-runtime đã trở thành androidx.room3:room3-runtime và các lớp như androidx.room.RoomDatabase sẽ nằm ở androidx.room3.RoomDatabase.

Ưu tiên Kotlin và Coroutine

Không còn tạo mã Java, Room 3.0 cũng yêu cầu KSP và trình biên dịch Kotlin ngay cả khi cơ sở mã tương tác với Room ở Java. Bạn nên có một dự án nhiều mô-đun, trong đó việc sử dụng Room được tập trung và có thể áp dụng Trình bổ trợ Gradle Kotlin và KSP mà không ảnh hưởng đến phần còn lại của cơ sở mã.

Room 3.0 cũng yêu cầu Coroutine và cụ thể hơn là các hàm DAO phải tạm ngưng trừ phi chúng trả về một loại phản ứng, chẳng hạn như Flow. Room 3.0 không cho phép chặn các hàm DAO. Hãy xem Tài liệu về Coroutine trên Android để bắt đầu tích hợp Coroutine vào ứng dụng.

Di chuyển sang API SQLiteDriver

Khi chuyển từ SupportSQLite, các ứng dụng sẽ cần di chuyển sang API SQLiteDriver. Việc di chuyển này là cần thiết để tận dụng đầy đủ lợi ích của Room 3.0, bao gồm cả việc cho phép sử dụng thư viện SQLite đi kèm thông qua BundledSQLiteDriver. Bạn có thể bắt đầu di chuyển sang API trình điều khiển ngay hôm nay bằng Room 2.7.0 trở lên. Bạn nên tránh sử dụng SupportSQLite thêm nữa. Nếu bạn di chuyển các tích hợp Room sang API SQLiteDriver, thì quá trình chuyển đổi sang Room 3.0 sẽ dễ dàng hơn vì việc thay đổi gói chủ yếu liên quan đến việc cập nhật các tham chiếu ký hiệu (nhập) và có thể yêu cầu thay đổi tối thiểu đối với các vị trí gọi.

Để biết thông tin tổng quan ngắn gọn về API SQLiteDriver, hãy xem Tài liệu về API SQLiteDriver.

Để biết thêm thông tin chi tiết về cách di chuyển Room để sử dụng API SQLiteDriver, hãy xem tài liệu chính thức để di chuyển từ SupportSQLite.

Trình bao bọc SupportSQLite của Room

Chúng tôi hiểu rằng việc loại bỏ hoàn toàn SupportSQLite có thể không khả thi ngay lập tức đối với tất cả các dự án. Để giúp quá trình chuyển đổi này dễ dàng hơn, Room 2.8.0, phiên bản mới nhất của dòng Room 2.0, đã giới thiệu một cấu phần phần mềm mới có tên là androidx.room:room-sqlite-wrapper. Cấu phần phần mềm này cung cấp một API tương thích cho phép bạn chuyển đổi RoomDatabase thành SupportSQLiteDatabase, ngay cả khi các API SupportSQLite trong cơ sở dữ liệu đã bị tắt do đã cài đặt SQLiteDriver. Điều này cung cấp một cầu nối tạm thời cho các nhà phát triển cần thêm thời gian để di chuyển hoàn toàn cơ sở mã của họ. Cấu phần phần mềm này tiếp tục tồn tại trong Room 3.0 dưới dạng androidx.room3:room3-sqlite-wrapper để cho phép di chuyển sang Room 3.0 trong khi vẫn hỗ trợ việc sử dụng SupportSQLite quan trọng.

Ví dụ: các lệnh gọi roomDatabase.openHelper.writableDatabase có thể được thay thế bằng roomDatabase.getSupportWrapper() và một trình bao bọc sẽ được cung cấp ngay cả khi setDriver() được gọi trên trình tạo của Room.

Để biết thêm thông tin chi tiết, hãy xem tài liệu về room-sqlite-wrapper.

Hỗ trợ web cho Room và SQLite

Tính năng hỗ trợ cho các mục tiêu Kotlin Multiplatform JS và WasmJS mang đến một số thay đổi quan trọng nhất về API. Cụ thể, nhiều API trong Room 3.0 là các hàm tạm ngưng vì tính năng hỗ trợ thích hợp cho bộ nhớ web là không đồng bộ. API SQLiteDriver cũng đã được cập nhật để hỗ trợ Web và một trình điều khiển không đồng bộ web mới có trong androidx.sqlite:sqlite-web. Đây là trình điều khiển dựa trên Web Worker cho phép duy trì cơ sở dữ liệu trong Hệ thống tệp riêng tư của nguồn gốc (OPFS).

Để biết thêm thông tin chi tiết về cách thiết lập Room cho Web, hãy xem Ghi chú phát hành Room 3.0.

Loại dữ liệu trả về DAO tuỳ chỉnh

Room 3.0 giới thiệu khả năng thêm các tích hợp tuỳ chỉnh vào Room tương tự như RxJava và Phân trang. Thông qua một API chú giải mới có tên là @DaoReturnTypeConverter bạn có thể tạo tích hợp của riêng mình để mã được tạo của Room có thể truy cập được trong thời gian chạy. Điều này cho phép các hàm @Dao có các loại dữ liệu trả về tuỳ chỉnh mà không cần phải đợi nhóm Room thêm tính năng hỗ trợ. Các tích hợp hiện có được di chuyển để sử dụng chức năng này và do đó, giờ đây, những người dựa vào chức năng này sẽ cần thêm trình chuyển đổi vào định nghĩa @Database hoặc @Dao.

Ví dụ: trình chuyển đổi Phân trang sẽ nằm trong cấu phần phần mềm androidx.room3:room3-paging và được gọi là PagingSourceDaoReturnTypeConverter. Trong khi đó, đối với LiveData, trình chuyển đổi nằm trong androidx.room3:room3-livedata và được gọi là LiveDataDaoReturnTypeConverter.

Để biết thêm thông tin chi tiết, hãy xem phần Trình chuyển đổi loại dữ liệu trả về DAO trong Ghi chú phát hành Room 3.0.

Chế độ bảo trì của Room 2.x

Vì quá trình phát triển Room sẽ tập trung vào Room 3, nên phiên bản Room 2.x hiện tại sẽ chuyển sang chế độ bảo trì. Điều này có nghĩa là sẽ không có tính năng chính nào được phát triển, nhưng các bản phát hành bản vá (2.8.1, 2.8.2, v.v.) vẫn sẽ diễn ra với các bản sửa lỗi và cập nhật phần phụ thuộc. Nhóm cam kết thực hiện công việc này cho đến khi Room 3 trở nên ổn định.

Những chỉnh sửa cuối

Chúng tôi vô cùng hào hứng với tiềm năng của Room 3.0 và những cơ hội mà phiên bản này mở ra cho hệ sinh thái Kotlin. Hãy chờ đón thêm thông tin cập nhật khi chúng tôi tiếp tục hành trình này!

Tác giả:

Tiếp tục đọc