Shorebird CodePush - Giải pháp cập nhật Over-the-Air cho ứng dụng Flutter
Shorebird CodePush là công cụ giúp các lập trình viên Flutter có thể cập nhật mã nguồn qua mạng (OTA) nhanh chóng mà không phải chờ duyệt trên App Store hay Google Play. Bài viết phân tích kiến trúc Flutter, giới thiệu cách Shorebird thay đổi môi trường runtime để hỗ trợ patch code linh hoạt, đồng thời hướng dẫn chi tiết cách tích hợp và áp dụng cho dự án thực tế.

Shorebird CodePush - Giải pháp cập nhật Over-the-Air cho ứng dụng Flutter
Trong phát triển ứng dụng di động, việc xử lý nhanh các lỗi nghiêm trọng là rất quan trọng. Với Flutter truyền thống, nếu phát hiện lỗi sau khi phát hành, nhóm phát triển phải làm bản sửa, gửi lên cửa hàng ứng dụng và chờ duyệt, thường mất từ 24 đến 48 tiếng hoặc hơn trong các ngày nghỉ cuối tuần. Điều này ảnh hưởng trực tiếp đến trải nghiệm người dùng và điểm đánh giá app.
Trong khi các dự án React Native có thể cập nhật nhanh qua việc thay thế gói JavaScript (code push) thì Flutter lại không có cơ chế tương đương do khác biệt về kiến trúc biên dịch. Bài viết này giới thiệu Shorebird CodePush, giải pháp cho phép cập nhật mã Flutter theo phương thức patch theo runtime mà không cần tái phát hành app lên store, giúp tăng tốc độ xử lý lỗi và cải thiện độ ổn định ứng dụng.
Tại sao Flutter không thể cập nhật code như React Native?
Flutter sử dụng ahead-of-time (AOT) compilation, tức là biên dịch sẵn mã Dart thành mã máy ARM gốc và đóng gói vào nhị phân ứng dụng khi build. Điều này mang lại hiệu năng cao, khởi động nhanh và trải nghiệm mượt mà cho app.
Ngược lại, React Native chạy JavaScript trong một engine (Hermes hoặc JSC) tải từ một file bundle lúc khởi động. Thay thế file này đồng nghĩa với việc cập nhật logic app nhẹ nhàng mà không phải chờ duyệt app.
Với Flutter, không có file đơn giản nào để thay thế vì mã biên dịch là nhị phân native (libapp.so trên Android, tương tự trên iOS). Không thể so sánh và thay thế file snapshot .dill động như JavaScript được vì runtime Flutter không hỗ trợ tải mã biên dịch mới tại runtime.
Chính vì thế, AOT là con dao hai lưỡi: nó tăng tính ổn định nhưng làm việc cập nhật mã ngay khi runtime trở nên khó khăn.
Shorebird CodePush hoạt động như thế nào?
Để giải quyết bài toán trên, Shorebird đã tùy biến Dart VM và Flutter engine để thêm một interpreter Dart tùy chỉnh cùng tồn tại song song với snapshot AOT. Khi app khởi động:
-
Shorebird runtime sẽ kiểm tra server xem có patch nào áp dụng cho phiên bản app đang chạy không.
-
Nếu không có patch, app chạy snapshot AOT chuẩn như bình thường.
-
Nếu có patch, runtime sẽ thực thi mã Dart đã được cập nhật qua interpreter mới, trong khi snapshot AOT vẫn ở đó làm dự phòng.
Điều này cho phép cập nhật một phần mã Dart/Flutter widget mà không cần phát hành app mới.
Một số khái niệm quan trọng:
-
Release: Bản build app chuẩn có chứa Shorebird runtime, được build và đăng ký trên server Shorebird rồi submit lên App Store/Google Play.
-
Patch: Bản cập nhật mã Dart được tạo ra bằng cách so sánh phiên bản mới với release, chỉ upload phần thay đổi lên CDN của Shorebird.
Patch chỉ áp dụng với đúng phiên bản release đó. Người dùng chưa cập nhật phiên bản trước sẽ không nhận patch.
| Có thể cập nhật OTA | Cần phát hành bản mới trên Store |
|---|---|
| Mã Dart & Flutter widgets | Mã native Kotlin, Swift, Java, Obj-C |
| Giao diện, logic, routing | Thay đổi AndroidManifest, Info.plist |
| Quản lý trạng thái Dart | Thay đổi quyền runtime, plugin native |
| Sửa lỗi Dart | Thay đổi asset nhị phân, native dependency |
Do đó Shorebird thích hợp sửa lỗi, cải tiến nhưng không thể cập nhật các phần native hoặc đòi hỏi thay đổi cấu hình hệ thống.
Hướng dẫn tích hợp Shorebird vào dự án Flutter
Chu trình từ Flutter app hiện tại đến patch đầu tiên mất khoảng 15 phút:
- Cài đặt Shorebird CLI:
curl --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/shorebirdtech/install/main/install.sh -sSf | bash
shorebird login
- Khởi tạo Shorebird trong project:
shorebird init
Lệnh tạo file shorebird.yaml chứa app_id, đồng thời cấu hình Flutter engine để chạy runtime Shorebird.
- Tạo release:
shorebird release android
shorebird release ios
Build bản release có runtime Shorebird đi kèm, đăng ký trên server, tạo file .aab hoặc .ipa để submit Store.
-
Gửi bản build lên Play Console và App Store Connect như bình thường.
-
Khi cần fix lỗi Dart, tạo patch:
shorebird patch android
shorebird patch ios
Patch tự động được tạo bằng cách so sánh Dart snapshot, tải lên CDN và phân phối đến thiết bị người dùng bản release tương ứng.
Quản lý cập nhật trong app
Mặc định patch tải ngầm, áp dụng khi khởi động lạnh app. Package Dart shorebird_code_push cung cấp API để kiểm tra và áp dụng cập nhật chủ động:
import 'package:shorebird_code_push/shorebird_code_push.dart';
Future checkForUpdate() async {
final updater = ShorebirdUpdater();
final status = await updater.checkForUpdate();
if (status == UpdateStatus.outdated) {
try {
await updater.update();
} on UpdateException catch (error) {
// Xử lý lỗi cập nhật
}
}
}
Có thể gọi hàm trên trong initState của widget gốc hoặc khi app resume. Ngoài ra, có thể hiện banner thông báo cập nhật để người dùng chủ động restart app.
Các tính năng nâng cao
-
Phát hành theo tỉ lệ % (staged rollout): Giới hạn số người dùng nhận patch ban đầu để giám sát lỗi kỹ, sau đó tăng dần.
-
Rollback patch: Nếu patch lỗi, chạy lệnh rollback để đưa người dùng trở lại phiên bản trước, không cần chờ duyệt Store.
-
Custom tracks: Tạo các track beta, staging riêng biệt patch khác nhau, quản lý luồng phát hành linh hoạt.
-
Patch signing: Ký số patch bằng khóa riêng, runtime xác minh trước khi áp dụng, bảo vệ khỏi nguy cơ bị push patch độc hại khi tài khoản bị xâm nhập.
Tuân thủ chính sách App Store và Google Play
Apple nghiêm cấm app tải và thực thi code mới thay đổi tính năng mà không qua duyệt, nhưng có ngoại lệ cho code chạy qua interpreter tích hợp sẵn và không thêm tính năng mới. Shorebird tuân thủ bằng cách patch sửa lỗi code Dart hiện có, không tạo tính năng mới.
Google Play thoáng hơn, cho phép cập nhật mã qua OTA. Các tiêu chí về bảo mật, chính sách nội dung vẫn cần đảm bảo.
Với những dự án yêu cầu kiểm toán hoặc hoạt động trong lĩnh vực fintech, y tế, Shorebird hỗ trợ ghi nhận lịch sử patch đầy đủ để làm bằng chứng kiểm tra.
Việc sử dụng Shorebird giúp các nhóm phát triển ứng dụng Flutter tăng tốc độ phản ứng các lỗi, tiết kiệm thời gian chờ duyệt bản mới, nâng cao trải nghiệm người dùng tại Việt Nam và toàn cầu.
Bạn đã từng gặp khó khăn trong việc cập nhật app Flutter do thời gian duyệt dài? Hay đã trải nghiệm Shorebird trong dự án? Chia sẻ ý kiến cùng Lehuy.net nhé!
Kiến trúc hoạt động của Shorebird CodePush
Bài viết liên quan

Phần mềm
Ra mắt Rail: Ngôn ngữ lập trình tự hosting tích hợp HTTPS thuần túy
18 tháng 4, 2026

Phần mềm
Tương lai "Headless" cho AI cá nhân: Khi giao diện dòng lệnh lên ngôi
18 tháng 4, 2026

Công nghệ
Cursor đàm phán huy động hơn 2 tỷ USD với định giá 50 tỷ USD khi tăng trưởng doanh nghiệp bùng nổ
17 tháng 4, 2026
