Công bố Swift SDK cho Android
(swift.org)- Khi ngôn ngữ Swift đã trưởng thành và mở rộng từ đám mây, Windows, trình duyệt, vi điều khiển đến nhiều môi trường khác, nay Swift SDK cho Android đã được công bố
- SDK này là kết quả của nhiều tháng nỗ lực từ Swift Android workgroup, cho phép nhà phát triển xây dựng ứng dụng native Android bằng Swift
- SDK được tích hợp trong trình cài đặt Windows hoặc có thể tải riêng cho Linux và macOS, đồng thời đi kèm mã ví dụ và hướng dẫn
- Thông qua dự án swift-java, SDK hỗ trợ khả năng tương tác hai chiều giữa Swift và Java, tạo binding tự động để đảm bảo hiệu năng và độ an toàn
- Lần công bố này được đánh giá là bước ngoặt mở ra những khả năng mới cho phát triển di động, đồng thời thúc đẩy mở rộng hệ sinh thái đa nền tảng của Swift
Tổng quan về Swift SDK for Android
- Trong bối cảnh ngôn ngữ Swift trong 10 năm qua đã mở rộng từ dịch vụ đám mây đến Windows, trình duyệt, vi điều khiển, việc tiến vào nền tảng Android nay đã được chính thức hóa
- Nhờ khả năng tương tác (interoperability) của Swift, việc chia sẻ mã giữa nhiều nền tảng trở nên dễ dàng
- Android workgroup là một nhóm mở mà bất kỳ ai cũng có thể tham gia, với mục tiêu mở rộng Swift sang Android
- Thông báo lần này mang ý nghĩa công bố bản nightly (preview) của Swift SDK for Android, là thành quả từ quá trình cộng tác lâu dài của cộng đồng
Các tính năng chính và cách phân phối SDK
- Giờ đây, nhà phát triển có thể dùng Swift để trực tiếp xây dựng ứng dụng native Android
- Từ đó mở ra những khả năng mới cho phát triển đa nền tảng
- SDK được đóng gói kèm trình cài đặt Windows và cũng có thể tải riêng cho Linux và macOS
- Swift.org hướng dẫn cách thiết lập mã Swift trên thiết bị Android thông qua tài liệu "Getting Started"
- Kho lưu trữ Swift for Android Examples trên GitHub trình diễn quy trình ứng dụng end-to-end
Khả năng tương thích gói và mở rộng cộng đồng
- Với Swift SDK, có thể port các gói Swift hiện có sang Android
- Hơn 25% số gói trên Swift Package Index đã hỗ trợ build cho Android
- Trang Community Showcase hiển thị trạng thái tương thích với Android
- Sự mở rộng này tiếp tục củng cố hỗ trợ đa nền tảng của hệ sinh thái Swift
Dự án swift-java và khả năng tương tác
- Dự án swift-java là thư viện và trình tạo mã cung cấp khả năng tương tác (interoperability) giữa Swift và Java
- Nó tự động xử lý tích hợp hai chiều giữa Swift và Java, đồng thời tạo ra binding an toàn và hiệu năng cao
- Nhờ đó, nhà phát triển có thể chuyển logic nghiệp vụ sang Android, và có thể xem thêm nội dung liên quan trong video thuyết trình của Swift Server Side Meetup
Sự tham gia của cộng đồng và lộ trình sắp tới
- Bản phát hành preview lần này đã mở ra những cơ hội mới để cải thiện công cụ và mở rộng hệ sinh thái
- Cộng đồng được khuyến khích chia sẻ trải nghiệm, ý tưởng, công cụ và ứng dụng trong chuyên mục Android trên diễn đàn Swift
- Thông báo này cũng đang được thảo luận trong chuỗi thảo luận chính thức trên diễn đàn
- Android workgroup hiện đang soạn thảo tài liệu tầm nhìn (vision document), dự kiến sẽ đưa ra các lĩnh vực ưu tiên và định hướng tương lai cho Swift on Android
- Có thể theo dõi tiến độ chính qua project board, trong khi chất lượng SDK được quản lý bằng hệ thống CI chính thức
- Nhóm Swift đang thúc đẩy sự tham gia của cộng đồng, với mục tiêu củng cố vị thế của Swift trong hệ sinh thái Android
1 bình luận
Ý kiến trên Hacker News
Câu hỏi cốt lõi của mọi framework đa nền tảng là xử lý UI như thế nào
Nếu dùng một hệ thống thiết kế tạo cảm giác lạc quẻ trên từng nền tảng như Flex Builder của Adobe, thì cuối cùng vẫn phải tự hiện thực cảm giác native
Flutter cố tái hiện hoàn hảo theme Cupertino của iOS, còn React Native tận dụng widget mặc định của nền tảng để các yếu tố như cuộn có cảm giác tự nhiên
Tiếc là bài blog không nhắc tới phần quan trọng này
Dù Apple có phát hành Swift cho Android, triết lý thiết kế đặc trưng của Apple có thể vẫn khiến nó trở nên lạc điệu trên Android
Có vẻ hướng đi sau này sẽ phụ thuộc vào việc dự án này do Apple trực tiếp dẫn dắt, hay là một nỗ lực mã nguồn mở lấy cộng đồng làm trung tâm
Vì vậy tôi thích KMP. Trên iOS có thể viết UI bằng SwiftUI, trên Android bằng Kotlin, còn chỉ chia sẻ business logic
Nếu cố chia sẻ UI thì sẽ dẫn tới cơn ác mộng “viết một lần, debug ở mọi nơi”
Swift for Android có vẻ cũng sẽ cho phép chia sẻ logic ở cấp độ ngôn ngữ theo cách này
Ngay cả trong ví dụ cũng vẫn dùng Jetpack Compose rồi gọi logic Swift
Nó giữ cùng một cấu trúc với mô hình bộ nhớ đếm tham chiếu của Swift nên có tính nhất quán cao
Từ góc nhìn của người phụ trách công cụ dành cho nhà phát triển ở Apple, tôi hy vọng công nghệ này sẽ trở thành bàn đạp cho những đổi mới mới
SwiftUI vốn không phải “UI native” theo nghĩa gốc, mà là một ngôn ngữ khai báo được hệ thống diễn giải để tạo ra UIView hoặc NSView
Trừ khi tự sao chép trực tiếp như Flutter, còn không thì không thể dùng nguyên xi UI của Apple trên Android
Thay vào đó, các dự án như Skip.tools sẽ bridge SwiftUI sang Jetpack Compose
Có thể xem ví dụ trong ứng dụng Skip Showcase
Tôi là thành viên của sản phẩm Skip và Swift Android Workgroup, và đã tham gia với vai trò release manager cho lần phát hành SDK này
Thật sự rất vui vì nó được công bố như một dự án chính thức
Tôi từng dùng RN và Flutter nhưng vấn đề luôn là thiếu cảm giác native
Dĩ nhiên cũng có KMP, nhưng phần lớn nhà phát triển bắt đầu từ iOS rồi mới mở rộng sang Android
Nếu có thể chia sẻ code bằng Swift Package thì luồng này sẽ tự nhiên hơn rất nhiều
Trong khi đó nhà phát triển Swift/Objective-C ít hơn nhiều
Ở ngoài nước Mỹ, thị phần iPhone thấp hơn nên các công ty có xu hướng nghĩ theo hướng Windows hoặc trình duyệt là trung tâm
KMP đã được dùng trong những ứng dụng lớn như Google Workspace, và nhờ Kotlin cùng khoản đầu tư của JetBrains mà độ trưởng thành của nó rất cao
Flutter thì chu kỳ phát hành quá nhanh nên khó theo kịp
Với JavaScriptCore hoặc QuickJS, nó có thể chạy trên iOS, Android và Web, đồng thời hỗ trợ hot reload
Tuy vậy do chính sách app store, khó mà thay đổi tính năng lớn, nên hợp hơn với mức sửa lỗi
Trong thực tế chu kỳ phát hành mobile chậm chạp, tôi nghĩ cách tiếp cận này là một cơ hội lớn
Mô hình thư viện lõi dùng chung + project UI native cho từng nền tảng hoạt động rất ổn
Tôi từng thắc mắc liệu đây có phải là dự án liên quan đến SKIP transpiler mà tôi đã thấy trên blog của Skip.tools hay không
Tôi muốn đưa một ứng dụng SwiftUI sang Android nhưng muốn tránh RN
Skip có hai chế độ: chế độ Lite chuyển mã Swift thành Kotlin, và chế độ Fuse biên dịch trực tiếp Swift cho Android
Có thể dùng cả hai chế độ cùng nhau để tích hợp với hệ sinh thái Kotlin như Lottie, Firebase, v.v.
So sánh chi tiết có thể xem trong Skip Docs
Thật vui vì giờ đã có SDK chính thức nên có thể dùng bản chính thức thay vì tự build nữa
Hy vọng nó không kết thúc chỉ như một mức chứng minh khái niệm đơn giản kiểu Swift Embedded
Swift là một ngôn ngữ đẹp về mặt ngôn ngữ học, nhưng có cảm giác bất an quanh vai trò lãnh đạo cộng đồng
Tôi giờ không muốn thấy RN và Flutter nữa
Đã quá mệt với UI vuông vức và phản hồi chạm chậm chạp
Việc phản hồi chậm có nhiều khả năng là do cách app được hiện thực
Apple có thể sớm mất hứng thú với nó
“You got Kotlin in my iOS.”
“You got Swift in my Android.” — một cách nói dí dỏm
Xem tổng quan về Kotlin Native
Thông báo lần này có vẻ là bằng chứng thành công của hệ thống Swift SDK mới
Trước đây việc hỗ trợ nền tảng khác rất phức tạp vì vướng vào CMake, nhưng giờ chỉ cần tuân theo quy tắc SDK là có thể port sang bất kỳ nền tảng nào
Ngoài Android còn dự kiến mở rộng sang Linux, wasm, embedded, và sắp tới là Windows
Khả năng tương tác với JVM vẫn chưa hoàn chỉnh, nhưng rõ ràng tính độc lập nền tảng đã tăng lên
Tôi thích Kotlin Multiplatform, nhưng Swift for Android cũng rất thú vị
Việc chia sẻ thư viện Swift native cho các tác vụ nhạy cảm về bộ nhớ có vẻ sẽ hữu ích
Tuy vậy, nếu chuyển toàn bộ business logic sang Swift thì KMP hiện vẫn trưởng thành hơn
Việc chia sẻ business logic thực ra đã là bài toán được giải quyết từ lâu
Nỗi đau thực sự là phải viết UI hai lần
Cần một framework UI dùng chung mà không bất tiện như React Native
Nếu dùng cùng Expo thì trải nghiệm phát triển được cải thiện đáng kể
Tôi đã chia sẻ code giữa Android và iOS trong thời gian dài, nhưng chia sẻ UI là cơn ác mộng
Tôi chỉ chia sẻ logic phức tạp bằng C/C++/Rust, thành ra cuối cùng phải dùng tới ba ngôn ngữ
KMP và Swift for Android cho phép chỉ chia sẻ bằng Kotlin/Swift nên gọn gàng hơn nhiều
Cách tiếp cận này thực tế và hiệu quả hơn rất nhiều so với những framework cố ép chia sẻ UI