Cách giảm dung lượng ứng dụng di động mà không đánh đổi trải nghiệm

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Ứng dụng nặng mất nhiều thời gian tải, tốn dữ liệu di động và dễ bị người dùng bỏ qua, nhất là khi điện thoại sắp đầy bộ nhớ. Giảm dung lượng giúp cải thiện tỉ lệ cài đặt. Dưới đây là những cách thực tế để làm điều đó.

Bước đầu tiên: biết cái gì đang chiếm chỗ

Đừng đoán; hãy phân tích. Các công cụ hỗ trợ:

  • Android Studio APK Analyzer: mở APK hoặc AAB để xem kích thước từng phần: mã, tài nguyên, thư viện native, ảnh.
  • Flutter: lệnh phân tích kích thước giúp bạn thấy gói nào đóng góp bao nhiêu.
  • iOS: báo cáo kích thước ứng dụng trong Xcode khi phân phối.
flutter build appbundle --analyze-size
flutter build apk --split-per-abi

Kết quả thường cho thấy ảnh, phông chữ, thư viện native và các gói phụ thuộc chiếm phần lớn.

Dùng định dạng phát hành phù hợp

Android App Bundle cho phép Google Play tạo gói tải xuống tối ưu cho từng thiết bị (theo kiến trúc CPU, mật độ màn hình, ngôn ngữ). Nhờ vậy người dùng chỉ tải phần cần thiết. Đây thường là cách giảm dung lượng đáng kể mà không đổi gì ở mã nguồn.

Tối ưu hình ảnh

  1. Dùng định dạng hiệu quả như WebP thay vì PNG cho ảnh chụp và ảnh nền (kiểm tra nền tảng bạn nhắm tới có hỗ trợ).
  2. Dùng ảnh vector (SVG hoặc Vector Drawable) cho biểu tượng thay vì nhiều ảnh bitmap nhiều kích thước.
  3. Nén ảnh trước khi đưa vào dự án; không để ảnh gốc từ máy ảnh độ phân giải quá lớn.
  4. Tải ảnh lớn từ mạng khi cần, thay vì đóng gói sẵn vào ứng dụng.

Thu nhỏ mã và loại bỏ tài nguyên thừa

Với Android, bật R8 để rút gọn mã, che giấu tên và loại bỏ mã không dùng cùng tài nguyên thừa:

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
                          'proguard-rules.pro'
        }
    }
}

Sau khi bật, cần kiểm thử kỹ vì rút gọn có thể làm mất các lớp được dùng qua phản chiếu. Bổ sung quy tắc giữ lại trong tệp proguard-rules khi cần.

Quản lý thư viện phụ thuộc

  • Xem lại từng thư viện: có thật sự cần không, hay chỉ dùng một hàm nhỏ?
  • Tránh kéo cả thư viện lớn chỉ cho một tính năng đơn giản.
  • Loại bỏ các gói không còn dùng khỏi file khai báo phụ thuộc.
  • Cẩn thận với thư viện chứa mã native cho nhiều kiến trúc CPU.

Phông chữ, âm thanh và video

Chỉ đóng gói những kiểu phông bạn thực sự dùng (ví dụ thay vì cả bộ nhiều độ đậm nhạt). Âm thanh nên nén với bitrate hợp lý. Video dài không nên nhúng sẵn; hãy phát trực tuyến.

Tải nội dung theo nhu cầu

Với ứng dụng lớn như trò chơi, nên đóng gói phần lõi nhỏ và tải thêm màn chơi, tài nguyên khi cần. Google Play có hỗ trợ phân phối tài nguyên bổ sung theo yêu cầu. Cách này giảm dung lượng ban đầu, người dùng vào chơi nhanh hơn.

Đo lại và theo dõi theo thời gian

Dung lượng thường tăng dần theo từng phiên bản mà không ai để ý. Hãy ghi lại kích thước mỗi bản phát hành và đặt ngưỡng cảnh báo trong quy trình tích hợp liên tục.

Đừng quên dữ liệu sau khi cài

Bộ nhớ đệm và dữ liệu tải về cũng chiếm chỗ. Hãy đặt giới hạn cho bộ nhớ đệm ảnh, dọn dữ liệu cũ định kỳ và cho người dùng nút xóa bộ nhớ đệm trong cài đặt.

Kết luận

Phân tích để thấy rõ, phát hành bằng định dạng tối ưu, nén tài nguyên và loại bỏ thứ không cần là bốn bước hiệu quả nhất. Mỗi megabyte tiết kiệm được đều giúp người dùng cài ứng dụng của bạn dễ dàng hơn.

Cân bằng giữa dung lượng và trải nghiệm

Giảm dung lượng không nên làm hỏng chất lượng. Nén ảnh quá mạnh gây vỡ hạt, bỏ phông chữ thương hiệu làm mất bản sắc. Hãy đặt mục tiêu dung lượng theo đối tượng người dùng: nếu nhiều người dùng máy bộ nhớ thấp hoặc mạng chậm, ưu tiên nhẹ hơn. So sánh dung lượng tải xuống và dung lượng sau khi cài, vì hai con số này khác nhau. Cuối cùng, ghi con số dung lượng mỗi phiên bản để có thể phát hiện kịp thời khi nó tăng bất thường.

Một ví dụ thực tế

Giả sử bản AAB ban đầu nặng, phân tích cho thấy phần lớn nằm ở ảnh PNG lớn và một thư viện native cho nhiều kiến trúc. Chuyển ảnh sang WebP, tải ảnh minh họa từ mạng, và để Google Play tách theo kiến trúc đã đủ giảm đáng kể mà không đổi chức năng nào.

Bạn có thể tìm hiểu quy trình build và tối ưu ứng dụng chuyên sâu hơn trong các khóa học tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment