Cài Flutter trên Linux: Đừng để ‘Dependency Hell’ làm bạn nản chí

Development tutorial - IT technology blog
Development tutorial - IT technology blog

Ám ảnh mang tên Flutter Doctor toàn dấu X đỏ?

Nếu bạn vừa chuyển từ Windows sang Linux hoặc mới tập tành code App, nhìn màn hình flutter doctor toàn lỗi là trải nghiệm cực kỳ nản. Mình từng mất trắng hai ngày cuối tuần chỉ để loay hoay với cái Android Emulator không chịu khởi động. Thậm chí, lỗi Android license status unknown cứ hiện ra dù mình đã cài đủ Android Studio.

Setup môi trường trên Linux đôi khi giống như đang giải một ma trận phụ thuộc (dependency hell). Cài cái này thì báo thiếu cái kia. Fix xong biến môi trường PATH thì Java lại sai phiên bản. Đừng quá lo, mình đã tổng hợp quy trình chuẩn để bạn không phải đi vào vết xe đổ đó nữa.

Tại sao Linux hay ‘dở chứng’ khi cài Flutter?

Thực tế, Linux cực kỳ nhẹ và ổn định để code Mobile. Tuy nhiên, anh em mới cài đặt hay vấp vì ba lý do chính:

  • Quản lý quyền (Permissions): Linux bảo mật phần cứng rất chặt. Nếu không đưa user vào group kvm, Emulator sẽ chạy như rùa bò vì thiếu tăng tốc phần cứng.
  • Thiếu thư viện 32-bit: Nhiều tool cũ trong Android SDK vẫn đòi thư viện 32-bit. Các bản Ubuntu mới (từ 22.04 trở đi) thường lược bỏ các gói này để tối ưu hệ thống.
  • Cấu hình file ẩn: Không có giao diện GUI như Windows, bạn phải tự sửa .bashrc hoặc .zshrc. Chỉ cần thừa một khoảng trắng hay sai dấu gạch chéo là lệnh flutter sẽ báo “not found”.

Nên cài Flutter theo cách nào cho ‘nhàn’?

Hiện có 3 con đường phổ biến, nhưng mỗi cách lại có cái ‘bẫy’ riêng:

  1. Sử dụng Snap:sudo snap install flutter là xong ngay. Tuy nhiên, Snap chạy trong môi trường sandbox (cô lập). Nó thường không nhận diện được Android Studio hoặc Chrome để debug, cực kỳ ức chế.
  2. Dùng công cụ quản lý (fvm/asdf): Phù hợp cho dân pro cần đổi phiên bản Flutter liên tục. Nếu bạn mới bắt đầu, cách này chỉ làm mọi thứ phức tạp thêm.
  3. Cài thủ công từ file tar.xz: Đây là cách mình khuyên dùng. Bạn toàn quyền kiểm soát vị trí SDK, dễ update và không lo lỗi quyền ghi vào thư mục hệ thống.

Các bước setup ‘chuẩn chỉ’ để gõ code là chạy

1. Chuẩn bị ‘đồ nghề’ (Dependencies)

Trước khi tải SDK, hãy cài sẵn các thư viện nền tảng. Mở terminal và dán đoạn lệnh này:

sudo apt-get update
sudo apt-get install -y curl git unzip xz-utils libglu1-mesa clang cmake ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++6

Thiếu các gói này, bạn sẽ không bao giờ compile được ứng dụng Desktop hay xử lý đồ họa mượt mà.

2. Cài Flutter SDK và cấu hình PATH

Hãy tạo thư mục ~/development trong Home để chứa code. Đừng bao giờ cài vào /usr/bin hay /opt. Bạn sẽ phải dùng sudo mỗi khi nâng cấp SDK, vừa mất an toàn vừa dễ lỗi phân quyền file.

mkdir ~/development
tar xf ~/Downloads/flutter_linux_3.x.x-stable.tar.xz -C ~/development

Giờ là bước then chốt: Thêm Flutter vào biến môi trường. Nếu dùng Zsh (mặc định trên Ubuntu mới), hãy mở ~/.zshrc:

nano ~/.zshrc
# Thêm dòng này xuống cuối file
export PATH="$PATH:$HOME/development/flutter/bin"

Nhớ chạy source ~/.zshrc để hệ thống cập nhật lệnh mới ngay lập tức.

3. Xử lý Java và Android Toolchain

Lỗi Android license status unknown thường do thiếu Command-line Tools. Bạn vào Android Studio, chọn SDK Manager > SDK Tools rồi tích vào Android SDK Command-line Tools (latest). Đây là lỗi phổ biến nhất khiến 90% người mới bỏ cuộc.

Về Java, Flutter ‘hợp cạ’ nhất với OpenJDK 17. Java 21 mới quá có thể khiến Gradle bị crash khi build các dự án cũ.

sudo apt install openjdk-17-jdk
flutter doctor --android-licenses

Cứ nhấn y mỏi tay cho đến khi xong. Nếu bước này lỗi, hãy kiểm tra lại Command-line Tools ở trên.

4. Kích hoạt ‘phép màu’ KVM cho Emulator

Nếu bật Emulator mà thấy báo /dev/kvm device: permission denied, bạn cần cấp quyền truy cập ảo hóa. Chạy lệnh sau và bắt buộc LOGOUT (đăng xuất) để máy nhận quyền mới:

sudo usermod -aG kvm $USER
sudo chown $USER /dev/kvm

Khi có KVM, Emulator sẽ chạy mượt hơn gấp 5-10 lần so với chế độ giả lập phần mềm thông thường.

Nâng cấp trải nghiệm cho máy cấu hình yếu

Máy 8GB RAM mà gánh cả Android Studio lẫn Emulator là thảm họa. Để code dễ thở hơn, bạn nên:

  • Ưu tiên VS Code: Nó nhẹ hơn Android Studio rất nhiều. Chỉ cần cài thêm extension Flutter và Dart là đủ dùng.
  • Debug bằng máy thật: Cắm cáp USB, bật USB Debugging trên điện thoại. Cách này vừa không tốn RAM, vừa cho cảm giác vuốt chạm thực tế nhất.
  • Dùng Scrcpy: Đây là công cụ stream màn hình điện thoại lên máy tính qua USB. Bạn sẽ thấy màn hình điện thoại ngay trên Linux mà không tốn một MB RAM nào cho Emulator.

Khi bạn chạy flutter doctor và thấy dòng No issues found!, đó là lúc hành trình sáng tạo bắt đầu. Hy vọng những chia sẻ thực tế này giúp bạn tiết kiệm được vài tiếng đồng hồ quý giá để tập trung vào việc quan trọng nhất: Viết code.

Share: