Giảm kích thước của ứng dụng tức thì

Chỉ cần nhấn vào một đường liên kết web, Google Play Instant sẽ mang đến trải nghiệm gốc phong phú. Mọi người có thể trải nghiệm ứng dụng của bạn mà không cần cài đặt trước, nhờ đó nâng cao mức độ và chất lượng tương tác. Tuy nhiên, để ứng dụng tức thì tải nhanh như trang web thông thường dành cho thiết bị di động, bạn cần tạo một ứng dụng tức thì hiệu quả, có cấu trúc hợp lý. Tệp nhị phân của ứng dụng tức thì càng nhỏ, tải càng nhanh và trải nghiệm người dùng càng mượt mà.

Tài liệu này truyền đạt các phương pháp hay nhất để quản lý cấu trúc và kích thước tệp nhị phân của ứng dụng nhằm mang lại trải nghiệm ứng dụng tức thì mượt mà. Bạn cũng có thể áp dụng các phương pháp tương tự này để mang lại lợi ích cho ứng dụng có thể cài đặt của mình.

Tái cấu trúc thành nhiều mô-đun tính năng

Cải thiện lớn nhất đối với kích thước nhị phân của ứng dụng xảy ra khi bạn tái cấu trúc ứng dụng thành nhiều mô-đun tính năng. Bắt đầu với một mô-đun tính năng cơ sở, sau đó trích xuất các quy trình làm việc liên quan đến chủ đề vào các mô-đun tính năng riêng. Gán một hoạt động bắt đầu và URL duy nhất cho từng mô-đun tính năng để người dùng có thể hoàn tất thành công quy trình hoạt động của mô-đun.

Khi bạn tạo mô-đun tính năng, hãy giữ mô-đun tính năng cơ sở càng nhỏ càng tốt. Cụ thể, hãy chú ý kỹ đến những phần của ứng dụng cần quyền truy cập vào các thư viện phụ thuộc. Nếu chỉ một mô-đun tính năng sử dụng một thư viện nhất định, hãy nhập thư viện đó trong chính mô-đun tính năng, chứ không phải mô-đun tính năng cơ sở. Lưu ý rằng để phát hành ứng dụng tức thì cho một mô-đun tính năng cụ thể, kích thước tổng của mô-đun tính năng đó và mô-đun tính năng cơ sở phải nhỏ hơn 15 MB.

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

Khi tái cấu trúc ứng dụng, hãy lưu ý đến các phương pháp hay nhất sau đây:

Sử dụng cùng một cơ sở mã cho cả hai loại ứng dụng
Bạn có thể đơn giản hoá quy trình quản lý dự án của ứng dụng bằng cách sử dụng cùng một cơ sở mã theo mô-đun để tạo cả ứng dụng cần cài đặt và ứng dụng tức thì.
Thiết kế cho nhiều mô-đun tính năng
Ngay cả khi ứng dụng của bạn chỉ có một quy trình công việc và hiện chỉ yêu cầu một mô-đun tính năng duy nhất, bạn vẫn nên thiết kế nhiều mô-đun tính năng. Bằng cách đó, bạn có thể thêm các mô-đun hiện có vào ứng dụng của mình mà không ảnh hưởng đến kích thước của mô-đun tính năng gốc.
Không tập trung vào giới hạn kích thước mô-đun tính năng ở đầu
Giới hạn kích thước mô-đun tính năng không áp dụng cho các tệp nhị phân được tạo cục bộ. Bạn cũng có thể phát hành ứng dụng tức thì thông qua kênh kiểm thử nội bộ. Kênh này thực thi giới hạn 15 MB về kích thước mô-đun tính năng. Chỉ các kênh alphachính thức mới áp dụng giới hạn 15 MB.

Cập nhật tài nguyên ứng dụng

Một số ứng dụng, đặc biệt là những ứng dụng có lịch sử cơ sở mã dài hơn, chứa tài nguyên mà tệp nhị phân của ứng dụng không còn sử dụng nữa. Khi bạn tìm cách thu nhỏ mô-đun ứng dụng, hãy xem xét các nguồn mã không cần thiết phổ biến sau đây.

Giảm kích thước tệp hình ảnh

Bạn có thể giảm đáng kể tổng kích thước của các đối tượng có thể vẽ của ứng dụng bằng cách sử dụng định dạng tệp WebP thay vì PNG. Google Play Instant hỗ trợ đầy đủ cho WebP, bao gồm cả tính năng nén trong suốt và không tổn hao, nhờ đó, chất lượng hình ảnh sẽ vẫn giữ nguyên.

Nếu có thể, hãy xoá tất cả yêu cầu về khả năng tương thích ngược để sử dụng hình ảnh PNG khác. Nếu bạn phải dùng hình ảnh PNG, hãy đặt hình ảnh đó vào mô-đun dùng để tạo và cài đặt ứng dụng.

Xoá các ngôn ngữ không dùng đến

Nếu ứng dụng của bạn hỗ trợ nhiều ngôn ngữ, hãy giảm nhiều tài nguyên đã bản địa hoá nhất có thể. Bước này đặc biệt hữu ích nếu bạn sử dụng thư viện "khả năng tương thích với ứng dụng", chẳng hạn như android.support.v7.appcompat. Thư viện này bao gồm các thông báo bằng nhiều ngôn ngữ, trong đó một số ngôn ngữ có thể không được ứng dụng của bạn hỗ trợ.

Để tìm hiểu thêm, hãy xem cách xoá tài nguyên thay thế không dùng đến, đặc biệt là các ngôn ngữ không dùng đến.

Xoá tệp thừa

Ứng dụng của bạn có thể không còn sử dụng một số tài nguyên bạn đã nhập vào dự án. Để giúp xoá các tài nguyên này, Android Studio có tính năng kiểm tra tìm lỗi mã nguồn cho trường hợp cụ thể này. Để sử dụng công cụ này, vui lòng hoàn thành các bước sau:

  1. Nhấn Control+Alt+Shift+I (Command+Alt+Shift+I trên Mac OS).
  2. Trong hộp thoại xuất hiện, nhập "unused resources".
  3. Chọn tuỳ chọn Unused resources (Tài nguyên không dùng đến) để bắt đầu quá trình kiểm tra mức sử dụng tài nguyên.

Nếu vẫn còn bất kỳ tài nguyên lớn nào trong ứng dụng, hãy cân nhắc xem có thể huỷ đóng gói chúng khỏi ứng dụng và tải chúng xuống dưới dạng tệp độc lập sau khi người dùng bắt đầu tương tác với ứng dụng hay không. Việc trì hoãn tải hình ảnh này thường đòi hỏi bạn phải thay đổi mã, nhưng nó có thể làm giảm đáng kể kích thước tệp của ứng dụng tức thì bằng cách chỉ tải xuống các tài nguyên mà người dùng yêu cầu rõ ràng.

Xoá thư viện không dùng đến

Khi phát triển trong phạm vi, ứng dụng có thể có số lượng phần phụ thuộc đáng ngạc nhiên, cụ thể là một trong các loại sau:

  • Thư viện gốc: Các thư viện chứa mã gốc mà ứng dụng tức thì của bạn không bao giờ chạy.
  • Phần phụ thuộc bắc cầu: Các thư viện mà thư viện nhập của ứng dụng phụ thuộc vào.

Android Studio có một số công cụ hữu ích giúp xác định mọi phần phụ thuộc không liên quan trong dự án ứng dụng của bạn:

Thư viện bên ngoài

Chế độ xem Project (Dự án) của Android Studio bao gồm phần External Libraries (Thư viện bên ngoài).

Phần này chứa mọi thư viện mà ứng dụng của bạn sử dụng, bao gồm cả mã gốc và mọi phần phụ thuộc bắc cầu. Trong khung hiển thị này, hãy tìm các thư viện không dùng đến hoặc trùng lặp mà ứng dụng của bạn không yêu cầu.

Công cụ phân tích APK

Bạn có thể sử dụng công cụ Công cụ phân tích APK để so sánh các bản dựng, bao gồm cả bản dựng ứng dụng tức thì.

Sau khi bạn xác định những thư viện mà ứng dụng của mình không cần, hãy loại trừ các thư viện đó bằng cách thêm các dòng tương tự như sau vào tệp bản dựng Gradle:

<feature_module>/build.gradle

Groovy

dependencies {
    implementation('some-important-but-large-library') {
        exclude group: 'com.example.imgtools', module: 'native'
    }
}

Kotlin

dependencies {
    implementation('some-important-but-large-library') {
        exclude(group = "com.example.imgtools", module = "native")
    }
}

Để biết thêm thông tin về cách giảm tổng kích thước nhập của các phần phụ thuộc của ứng dụng, hãy xem hướng dẫn của Gradle về Quản lý phần phụ thuộc.

Triển khai quá trình phân phối thành phần trên đám mây

Nếu cần giảm thêm kích thước, bạn có thể phải sử dụng phương pháp phân phối tài sản trên đám mây.