Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Viết riêng ứng dụng cho Android, iOS và web tốn nhiều thời gian và nhân lực. Vì vậy các hướng tiếp cận "một codebase cho nhiều nền tảng" ngày càng phổ biến. Nhưng mỗi cách chia sẻ code theo kiểu khác nhau. Bài này đặt ba lựa chọn tiêu biểu cạnh nhau để bạn hiểu triết lý riêng của từng cái.
Flutter dùng ngôn ngữ Dart và tự dựng giao diện bằng engine đồ họa riêng, nên hình ảnh nhất quán trên mọi thiết bị. Giao diện được xây từ cây widget:
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Xin chào')),
body: const Center(child: Text('Một codebase, nhiều nền tảng')),
),
);
}
}
Điểm mạnh là giao diện tùy biến linh hoạt và hiệu năng ổn định; điểm cần cân nhắc là phải học Dart và cách xây giao diện riêng của Flutter.
React Native cho phép viết giao diện bằng React và JavaScript hoặc TypeScript, nhưng hiển thị bằng các thành phần giao diện gốc của từng hệ điều hành. Nếu bạn đã biết React cho web, đường học khá thuận lợi:
import React from 'react';
import { View, Text } from 'react-native';
export default function App() {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Một codebase, nhiều nền tảng</Text>
</View>
);
}
Ưu điểm là tận dụng hệ sinh thái JavaScript và có thể chia sẻ một phần logic với web. Thách thức là thỉnh thoảng cần viết mã gốc cho tính năng đặc thù.
Kotlin Multiplatform (KMP) cho phép viết phần logic dùng chung bằng Kotlin, như mạng, lưu trữ, quy tắc nghiệp vụ, rồi biên dịch cho Android, iOS và các nền tảng khác. Giao diện có thể viết gốc cho từng nền tảng hoặc dùng bộ công cụ giao diện chung đi kèm. Với đội đã quen Kotlin trên Android, đây là con đường tự nhiên.
// Mã dùng chung (commonMain)
expect fun tenNenTang(): String
fun loiChao(): String = "Xin chào từ " + tenNenTang()
Cơ chế expect/actual cho phép khai báo hàm chung và cài đặt riêng cho từng nền tảng.
| Tiêu chí | Flutter | React Native | Kotlin Multiplatform |
|---|---|---|---|
| Ngôn ngữ | Dart | JavaScript/TypeScript | Kotlin |
| Cách tạo giao diện | Tự vẽ bằng engine riêng | Thành phần gốc qua React | Gốc hoặc bộ giao diện chung |
| Phù hợp với người | Muốn giao diện thống nhất | Biết sẵn React/JS | Biết Kotlin/Android |
Với phần lớn ứng dụng thông thường, khác biệt khó nhận ra. Ứng dụng đồ họa nặng hoặc dùng sâu tính năng hệ thống có thể cần mã gốc.
Nếu mục tiêu là ra sản phẩm nhanh, chọn đa nền tảng. Nếu muốn làm sâu hoặc vào công ty chuyên một nền tảng, học gốc có lợi thế riêng.
Không có lựa chọn đúng cho mọi trường hợp. Quan trọng là hiểu mỗi công cụ chia sẻ code ở tầng nào và đánh đổi gì. Với người mới, hãy chọn công cụ khớp với kỹ năng hiện có để đạt kết quả nhanh nhất.
Để học phát triển ứng dụng di động từ cơ bản, mời bạn xem các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment