- Một framework cho phép phát triển ứng dụng Android native chỉ bằng Swift, cấu thành toàn bộ từ UI đến manifest và lifecycle trong một ngôn ngữ duy nhất
- Cung cấp cấu trúc xây dựng Android UI theo phương thức UI khai báo, hoàn toàn không dùng XML, Java hay Kotlin
- Hoạt động như một framework Android native thuần túy, không phải web wrapper hay transpiler
- Có thể định nghĩa UI bằng cú pháp khai báo tương tự SwiftUI, đồng thời ẩn hoàn toàn tầng JNI phức tạp
- Mang lại trải nghiệm phát triển tích hợp khi định nghĩa trực tiếp cả Android Manifest và cấu hình Gradle bằng mã Swift
- Là một phương án native mới để lập trình viên Swift mở rộng sang Android, đồng thời là bước ngoặt mở ra khả năng mới cho phát triển đa nền tảng dựa trên Swift
Tổng quan về Droid
- Droid là một framework được thiết kế để có thể phát triển ứng dụng Android native chỉ bằng ngôn ngữ Swift
- Được tổ chức để quản lý UI, cấu hình ứng dụng, lifecycle và manifest trong một ngôn ngữ và một codebase duy nhất
- Loại bỏ sự phụ thuộc vào XML, Java và Kotlin vốn được xem là bắt buộc trong phát triển Android
- Bao gồm các thành phần native của Android như AndroidX, Flexbox và Material Design
- Cung cấp cú pháp khai báo tương tự SwiftUI để đơn giản hóa việc định nghĩa UI
- Ẩn hoàn toàn tầng JNI và cho phép truy cập qua API cấp cao
Mục tiêu thiết kế và đặc điểm
- Dựa trên Pure Swift, toàn bộ UI, manifest và cấu hình ứng dụng đều được viết bằng Swift
- Áp dụng UI khai báo, chú trọng tính dễ đọc và khả năng kết hợp
- Duy trì phương thức phát triển No XML hoàn toàn không sử dụng XML
- Áp dụng mô hình thực thi Android native, không phải cách tiếp cận dựa trên web hay chuyển đổi mã
- Cung cấp cấu trúc tích hợp để định nghĩa UI, manifest và phụ thuộc Gradle tại một nơi
Cách tổ chức UI khai báo
- Sử dụng API thân thiện với Swift để xây dựng Android UI theo kiểu khai báo
- Biểu diễn widget Android bằng mã Swift như ConstraintLayout, VStack, TextView, MaterialButton
- Định nghĩa trực tiếp trong mã các ràng buộc layout, sự kiện click và thiết lập style
Viết Android Manifest bằng Swift
- Khai báo chính Android Manifest bằng mã Swift
- Quản lý ở cấp độ mã các thiết lập như biểu tượng ứng dụng, theme, activity và fragment
- Tích hợp trong một file Swift duy nhất việc xử lý sự kiện lifecycle và logic cấu hình
Tài liệu và môi trường phát triển
- Có tài liệu chính thức và đang tiếp tục được mở rộng
- Dù chưa toàn bộ tính năng Android đều được tài liệu hóa, các hướng dẫn hiện có được cung cấp ở dạng đã tinh chỉnh
- Có thể bắt đầu phát triển ngay lập tức thông qua Swift Stream IDE
Phạm vi hỗ trợ
- Hỗ trợ widget Android cổ điển
- Hỗ trợ thư viện AndroidX
- Hỗ trợ component Material Design
- Hỗ trợ layout Flexbox
Trạng thái dự án
- Dự án đang được phát triển tích cực và tiến hóa nhanh chóng
- API đang được cải thiện với khả năng mở rộng trong tương lai, nhưng tầm nhìn cốt lõi vẫn được giữ nguyên
- Tích cực khuyến khích phản hồi và tham gia
1 bình luận
Ý kiến trên Hacker News
Đã công bố Swift Stream IDE v1.17.0. Giờ đây có thể phát triển ứng dụng Android native hoàn chỉnh chỉ bằng Swift
Không cần đụng tới XML, Java hay Kotlin. Bên trong, framework SwifDroid do tác giả tạo ra sẽ xử lý vòng đời Android, Activity, Fragment, các widget UI (Material, Flexbox, v.v.) và tự động quản lý cả dependency Gradle
Nó biên dịch mã Swift để tạo ra một project có thể chạy ngay trong Android Studio. Cả công cụ lẫn framework đều được phát hành theo giấy phép mã nguồn mở MIT
Bạn nói không cần đụng tới XML, Java, Kotlin, nhưng tôi muốn biết liệu một lập trình viên Swift hoàn toàn không có kinh nghiệm Android có thể tạo ứng dụng thành công hay không
Ngoài ra, tôi cũng muốn biết hiện tại và trong năm tới, khoảng bao nhiêu phần trăm ứng dụng Kotlin hoặc Flutter có thể được viết bằng Swift
Bên tôi cũng đang thử làm điều tương tự nhưng dùng Rust thay vì Swift
Kiểu thử nghiệm này rốt cuộc vẫn phải đi qua JNI, nên có giới hạn vì 80% API chỉ được lộ ra qua Java
Những dự án như vậy lúc nào cũng thú vị, nhưng cuối cùng sẽ đâm phải vấn đề leaky abstraction
Cũng giống như trên iOS phải biết Objective-C, và trên Windows phải biết .NET/COM vậy
Theo kinh nghiệm của tôi với Unity, việc marshaling từ C# sang C khá mượt, còn với Swift thì tốn công hơn nhiều
Thực tế là mỗi framework mới lại phải xử lý riêng
Dùng một ngôn ngữ chung xuyên nền tảng như Swift hay Kotlin nhìn bề ngoài có vẻ hay, nhưng tôi nghĩ trên thực tế nó không hiệu quả như kỳ vọng
Cuối cùng bạn vẫn phải duy trì hai codebase, khác biệt và cách lách quá nhiều, nên thà cứ để mỗi bên dùng ngôn ngữ riêng của mình còn hơn
Hầu hết lập trình viên đều xây dựng sự nghiệp bằng cách học nhiều ngôn ngữ, và việc chuyển đổi cũng không quá khó. Đây là ý kiến cá nhân, nhưng tôi vẫn thấy bản thân dự án là rất tuyệt vời
Trước đây tôi cũng từng học vài tháng để làm ứng dụng Android native bằng Java, nhưng không thấy vui nên bỏ cuộc
Tôi thiên về phát triển native hoàn chỉnh, và dù đã dùng framework cross-platform suốt vài chục năm, tôi chưa từng thấy thành công lớn nào
Việc chuyển ngôn ngữ luôn đi kèm chi phí chuyển đổi ngữ cảnh. Mỗi lần tôi qua lại giữa Swift và PHP là lại hay mắc lỗi cú pháp
Có thể học ngôn ngữ rất nhanh, nhưng để thành thạo SDK, thư viện chuẩn và framework thì cần rất nhiều thời gian
Đặc biệt là bây giờ nhờ công cụ AI mà tốc độ xử lý việc đơn giản vốn đã nhanh rồi, nên hiệu quả tiết kiệm tổng thời gian phát triển không còn lớn
Nếu ứng dụng về bản chất chỉ ở mức web app thì còn được, chứ không thì tôi không khuyến nghị
Xét riêng về ngôn ngữ thì tôi thấy Swift tốt hơn, nhưng KMP lâu đời và ổn định hơn nên thực tế có lẽ tôi sẽ dùng bên đó
Nhưng tôi không thích việc bị phụ thuộc sâu hơn vào một hệ sinh thái của tập đoàn lớn nào đó
Hơn nữa, cá nhân tôi thấy Swift là một ngôn ngữ khá khó chịu, nên cũng không muốn dùng nó ở nền tảng khác làm gì
Tôi tò mò không biết nó so với Skip như thế nào
Có vẻ dự án này không nhằm đưa mã iOS SwiftUI sang Android, mà tập trung vào phát triển Swift dành riêng cho Android
Tôi muốn biết liệu điều đó có dẫn đến chất lượng ứng dụng tốt hơn không, và đã có ví dụ thực tế nào chưa
Chỉ riêng việc không phải dùng Android Studio hay IntelliJ thôi cũng đã là một cải thiện lớn rồi. Làm rất hay
Cửa sổ xin đồng ý cookie có cảm giác không tuân thủ quy định của châu Âu
Tôi không hiểu tại sao phát triển di động lại bất tiện hơn PC đến vậy
Tôi thắc mắc vì sao ngay cả việc tạo một Hello World bằng assembly trên mobile cũng lại khó như thế
Tôi đã nghỉ phát triển Android một thời gian, nên nếu tóm tắt tình hình hiện nay thì
Trước đây iOS dùng Swift, Android dùng Java
Còn bây giờ thì Java đã được thay bằng Kotlin, và có thêm các framework cross-platform như Flutter hay React Native
Tôi tò mò không biết Swift on Android có phải là một lớp trừu tượng nữa giống như vậy không, hay là nó gần native hơn
Xét cho cùng thì thứ nhanh nhất chẳng phải vẫn là mã native sao?
Cá nhân tôi thích Flutter hơn. Nhiều lập trình viên Android native cũng nói Flutter có thể là tương lai của phát triển Android
Có thể tham khảo thảo luận liên quan tại chuỗi Reddit này
Dự án này theo hướng tiếp cận khác với SwiftCrossUI hay Skip
SwiftCrossUI và Skip giữ nguyên SwiftUI để chạy trên nhiều nền tảng,
còn SwifDroid là viết UI dành riêng cho Android bằng Swift
Mục tiêu là tạo ứng dụng Android hoàn chỉnh bằng Swift mà vẫn dùng trực tiếp hệ thống View và API của Android, không cần Java/Kotlin/XML
Nói cách khác, đây không phải “viết một lần chạy mọi nơi”, mà là triển khai trải nghiệm Android native bằng Swift
Tôi muốn biết cách xử lý HTTP request và parse JSON theo phong cách idiomatic trong Swift