06. tháng 6 2025
Khi biên dịch mặc định, gói APK Android của dự án React Native có kích thước cực kỳ lớn - lên tới khoảng 70MB. Trong khi đó, các ứng dụng Android thuần túy mà tôi phát triển trước đây, dù chứa rất nhiều hình ảnh nặng, cũng chỉ dao động quanh mức 20MB.
Rõ ràng là cần thiết phải tối ưu hóa kích thước i9bet này. Một gói APK có dung lượng quá lớn không chỉ làm lãng phí không gian lưu trữ của người dùng mà còn tạo ấn tượng thiếu chuyên nghiệp. Người dùng có thể nghi ngờ rằng ứng dụng chứa nhiều thành phần không cần thiết hoặc dư thừa.
Android Studio cung cấp sẵn một công cụ mạnh mẽ để phân tích cấu trúc và kích thước của tệp APK. Bạn có thể truy cập thông qua menu Build -> Analyze APK.
Kết quả phân tích cho thấy thư mục chiếm nhiều dung lượng nhất chính là thư mục keo ty so lib
, bao gồm bốn thư mục con:
Mỗi thư mục này chứa tập hợp các tệp thư viện dành riêng cho một kiến trúc CPU khác nhau, với kích thước khoảng 16MB mỗi thư mục.
Theo mặc định, APK được tạo ra sẽ bao gồm mã gốc (native code) cho cả bốn kiến trúc CPU: x86, x86_64, ARMv7a và ARM64-v8a. Điều này giúp đảm bảo tính tương thích rộng rãi với hầu hết các thiết bị Android nhưng đồng thời cũng dẫn đến việc tăng đáng kể kích thước của gói APK do chứa nhiều mã nguồn không sử dụng trên mỗi thiết bị cụ thể.
Chúng ta có thể cấu hình file build.gradle
của ứng dụng để tạo ra các APK riêng biệt cho từng kiến trúc CPU:
1splits {
2 abi {
3 reset()
4 enable true
5 universalApk false
6 include "arm64-v8a"
7 }
8}
Cấu hình trên sẽ loại bỏ việc tạo ra một APK duy nhất chứa tất cả các kiến trúc CPU. Thay vào đó, mỗi kiến trúc sẽ có một APK riêng biệt. Ví dụ, tên tệp APK sau khi tối ưu sẽ là app-arm64-v8a-release.apk
.
Sau khi áp dụng giải pháp này, kích thước gói APK đã giảm từ 70MB xuống còn 26MB - một sự cải thiện đáng kể! Tôi đã thử nghiệm bằng cách cài đặt APK này lên điện thoại Redmi K80 chạy hệ điều hành Android và mọi thứ hoạt động hoàn toàn ổn định.
Hiện nay, phần lớn các thiết bị Android đều sử dụng kiến trúc arm64-v8a
. Các thiết bị giá rẻ thường sử dụng kiến trúc cũ hơn là armeabi-v7a
nhằm tiết kiệm chi phí sản xuất. Trong khi đó, các kiến trúc x86
và x86_64
hầu như không còn được sử dụng phổ biến ngoài các trình giả lập Windows.
Hướng dẫn phát triển ứng dụng đa nền tảng với React Native