Giảm kích thước ứng dụng

Ứng dụng có kích thước nhỏ liên quan trực tiếp đến sự thành công của việc tải xuống, đặc biệt là ở những thị trường mới nổi với kết nối thiết bị mạng kém hoặc tốc độ mạng thấp. Điều này có thể dẫn đến tỷ lệ dùng ứng dụng thấp hơn, từ đó làm giảm phạm vi và phạm vi tiếp cận đối tượng của bạn. Tuy nhiên, có nhiều cách giúp bạn giảm kích thước ứng dụng.

Các phương pháp hay nhất

Tải ứng dụng lên dưới dạng Android App Bundle

Cách dễ nhất để giảm kích thước ứng dụng ngay khi phát hành lên Google Play là tải ứng dụng lên dưới dạng Android App Bundle. Đây là một định dạng xuất bản mới bao gồm tất cả các tài nguyên và mã đã biên dịch của ứng dụng, đồng thời trì hoãn việc tạo APK và ký vào Google Play.

Giảm kích thước mã thời gian chạy

Kiểm tra để tìm mã mà ứng dụng của bạn không dùng tại thời gian chạy, ví dụ: bất kỳ mã tự động tạo hoặc lớp có kích thước lớn nào. Các trình tối ưu hoá mã như R8 có thể giúp tối ưu hoá và giảm kích thước mã, nhưng không thể xử lý các mã được bảo vệ bằng hằng số thời gian chạy. Thay thế cờ kiểm tra bằng hằng số thời gian biên dịch để tận dụng tối đa các công cụ tối ưu hoá. Bạn có thể bật tính năng rút gọn mã và tài nguyên trong tệp cấu hình Gradle:

android {
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            isShrinkResources = true
        }
    }
}

Xoá bố cục không cần thiết

Hợp nhất các bố cục không sử dụng có các thay đổi nhỏ về giao diện người dùng và xoá mọi bố cục không cần thiết để giảm kích thước tổng thể của mã ứng dụng. Ngoài ra, bạn có thể kết xuất động bố cục và khung hiển thị bất cứ khi nào có thể. Điều này khiến bạn tránh được việc vẽ các mẫu tĩnh và áp dụng bố cục thay thế mà không bị hao tổn về mặt kỹ thuật.

Đánh giá lại các tính năng ít dùng

Tối ưu hoá cụ thể cho Android (phiên bản Go) bằng cách tắt những tính năng có chỉ số về số người dùng hoạt động hằng ngày (DAU) thấp. Có thể kể đến một số ví dụ như xoá ảnh động phức tạp, tệp GIF có dung lượng lớn hoặc bất kỳ yếu tố thẩm mỹ bổ sung nào khác không cần thiết cho sự thành công của ứng dụng.

Sử dụng Dynamic Delivery

Play Feature Delivery sử dụng các tính năng nâng cao của gói ứng dụng để cho phép phân phối theo điều kiện hoặc tải xuống theo yêu cầu một số tính năng của ứng dụng. Bạn có thể sử dụng mô-đun tính năng để phân phối tuỳ chỉnh. Lợi ích duy nhất của mô-đun tính năng là mang lại khả năng tuỳ chỉnh cách thức và thời điểm tải nhiều tính năng của ứng dụng xuống thiết bị chạy Android 5.0 (API cấp 21) trở lên.

Giảm kích thước chuỗi có thể dịch

Bạn có thể dùng thuộc tính resConfigs của Android Gradle để xoá các tệp tài nguyên thay thế mà ứng dụng không cần. Nếu bạn đang dùng một thư viện có chứa tài nguyên ngôn ngữ (chẳng hạn như AppCompat hoặc Dịch vụ Google Play), thì ứng dụng sẽ bao gồm mọi chuỗi ngôn ngữ đã dịch cho các thông báo thư viện, bất kể bản dịch của ứng dụng là gì. Nếu chỉ muốn giữ lại những ngôn ngữ mà ứng dụng chính thức hỗ trợ, bạn có thể chỉ định những ngôn ngữ đó bằng thuộc tính resConfig. Mọi tài nguyên của những ngôn ngữ chưa được chỉ định sẽ bị xoá.

Để hạn chế tài nguyên ngôn ngữ chỉ còn tiếng Anh và tiếng Pháp, bạn có thể chỉnh sửa defaultConfig như sau:


android {
    defaultConfig {
        ...
        resConfigs "en", "fr"
    }
}

Sử dụng bản dịch có chọn lọc

Nếu một chuỗi nhất định không hiển thị trong giao diện người dùng của ứng dụng, thì bạn không cần phải dịch chuỗi đó. Các chuỗi dùng để gỡ lỗi, dùng cho thông báo ngoại lệ hoặc URL phải là giá trị cố định kiểu chuỗi trong mã chứ không phải là kiểu tài nguyên.

Ví dụ: đừng bận tâm đến việc dịch URL.

<string name="car_frx_device_incompatible_sol_message">
  This device doesn\'t support Android Auto.\n
  &lt;a href="https://support.google.com/androidauto/answer/6395843"&gt;Learn more&lt;/a&gt;
</string>

Bạn có thể nhận ra &lt;&gt, vì đây là các ký tự thoát cho <>. Bạn cần có các ký tự thoát này ở đây vì nếu bạn đặt một thẻ <a> vào trong thẻ <string>, thì trình biên dịch tài nguyên Android sẽ bỏ chúng vì không nhận dạng được thẻ. Tuy nhiên, điều này có nghĩa là bạn đang dịch thẻ HTML và URL sang 78 ngôn ngữ. Thay vào đó, bạn có thể xoá HTML:

<string name="car_frx_device_incompatible_sol_message">
         This device doesn\'t support Android Auto.
</string>

Kết hợp tệp nhị phân gốc với các phần phụ thuộc phổ biến

Nếu ứng dụng của bạn có nhiều cách triển khai Giao diện gốc Java (JNI) với các phần phụ thuộc cơ bản phổ biến, thì các tệp nhị phân sẽ tăng kích thước APK bằng các thành phần thừa. Bạn có thể kết hợp nhiều tệp nhị phân JNI thành một tệp nhị phân JNI trong khi vẫn tách riêng các tệp Java và JNI. Điều này có thể làm giảm đáng kể kích thước APK.