Hướng dẫn này mô tả cách giảm kích thước của trò chơi. Khi cài đặt, một trò chơi nhỏ hơn sẽ cần đến ít thời gian tải xuống hơn và tiêu tốn ít dữ liệu hơn. Cả hai điều này làm tăng số lượt chuyển đổi cài đặt. Nghiên cứu của Google cho thấy rằng kích thước tệp APK được phân phát tăng 6 MB sẽ làm giảm 1% tỷ lệ cài đặt. Nhiều nhà phát triển chuyển tài sản từ tệp APK sang một mạng phân phối nội dung (CDN), nhưng sau đó phát sinh chi phí ở cả việc lưu trữ CDN và việc phát triển cũng như duy trì hệ thống quản lý nội dung.
Để giảm kích thước của trò chơi, hãy làm theo các bước sau:
- Sử dụng các phương thức phân phối được tối ưu hoá như App Bundle và Play Asset Delivery.
- Xác định kích thước cơ sở của trò chơi và hiểu cấu trúc của trò chơi.
- Tìm kiếm tài sản và các tệp khác có thể giảm được kích thước.
- Kiểm tra kết cấu đồ hoạ và xác định cơ hội tối ưu hoá.
- Làm theo các đề xuất chung cho tài sản.
Sử dụng các phương thức phân phối được tối ưu hoá như Android App Bundle và Play Asset Delivery
Xem xét các phương thức phân phối sau:
Mặc dù các dự án cũ thường tạo ra một tệp APK để phát hành, nhưng trò chơi xuất bản trên Google Play phải sử dụng định dạng Android App Bundle. Các gói ứng dụng phân phối tệp APK đã được tối ưu hoá phù hợp với cấu hình thiết bị của từng người dùng. Trung bình, các gói ứng dụng làm giảm 20% kích thước ứng dụng.
Để phân phát thành phần trò chơi qua Google Play và vượt quá giới hạn kích thước tải xuống là 200 MB cho các gói ứng dụng tối đa nhiều GB, hãy sử dụng Play Asset Delivery (PAD). Không cần mạng phân phối nội dung (CDN) bên ngoài. PAD hỗ trợ ba phương thức phân phối riêng biệt, mỗi phương thức có thể dùng trong một trò chơi:
- Thời gian cài đặt: (Install-time): Tải tài sản xuống trong quá trình cài đặt. Tài sản được đóng gói trong gói tài sản. Gói tài sản sẽ thay thế cho các tệp Opaque Binary Blob (OBB).
- Theo sau nhanh chóng (Fast-follow): Tải tài sản xuống sau khi cài đặt.
- Theo yêu cầu (On-demand): Trò chơi bắt đầu tải tài sản xuống khi cần.
PAD yêu cầu trò chơi phải được đóng gói bằng định dạng App Bundle. PAD cũng có thể giảm lượng dữ liệu mà CDN của nhà phát triển sử dụng (nếu vẫn cần nhà cung cấp dịch vụ).
Google Play sử dụng Android App Bundle để tạo và phân phát tệp APK được tối ưu hoá cho cấu hình thiết bị của từng người dùng. Các tệp APK được tối ưu hoá này chứa một tập hợp nội dung kết cấu duy nhất, được định dạng bằng định dạng nén tối ưu cho thiết bị. Hãy định cấu hình gói ứng dụng của bạn để hỗ trợ nhiều loại định dạng nén kết cấu sao cho phù hợp với nhiều loại thiết bị nhất.
Xác định kích thước cơ sở của trò chơi và hiểu cấu trúc của trò chơi
Để làm quen với trò chơi, xác định lượng công việc cần thiết cho mọi hoạt động tối ưu hoá cụ thể và xác định xem trò chơi có tải thêm nội dung xuống hay không, hãy làm theo các bước sau:
- Sử dụng bản phát hành chính thức (không gỡ lỗi) của nhà phát triển hoặc tệp APK đã xuất bản.
- Ghi lại kích thước của tệp nhị phân khi được nhà phát triển phân phối hoặc trên trang của trò chơi trên Cửa hàng Play (nếu trò chơi đã được phát hành). Đối với kích thước tệp APK, yếu tố quan trọng nhất là lượng dữ liệu mà người dùng phải tải xuống để thực sự chạy được trò chơi.
- Cài đặt trò chơi trên một thiết bị rồi chạy trò chơi trong trình đơn trò chơi ban đầu. Tại thời điểm này, hãy kiểm tra kích thước cài đặt của trò chơi theo báo cáo của Android (trong phần Cài đặt > Bộ nhớ). Một số trò chơi có kích thước cài đặt ban đầu nhỏ (vì đây là con số chính để tối ưu hoá) nhưng lại tải thêm dữ liệu xuống sau khi cài đặt. Một số trò chơi tải nhiều gigabyte dữ liệu xuống sau khi cài đặt.
- Một số trò chơi chỉ tải dữ liệu xuống sau khi bạn bắt đầu chơi. Bạn nên chơi trò chơi một chút để xác định lượng dữ liệu cần thêm mà trò chơi tải xuống cho một người dùng thông thường trong lần chơi đầu tiên.
Tìm tài sản và các tệp khác có thể giảm được kích thước
Phần này mô tả cách giảm kích thước tệp trong tệp APK. Bạn có thể sử dụng Trình khám phá gói ứng dụng để tải các tệp APK dành riêng cho thiết bị.
Để giảm kích thước của các tệp được đóng gói trực tiếp vào APK, hãy làm theo các bước sau:
- Sử dụng Công cụ phân tích APK của Android Studio. Trong Android Studio, hãy chọn File (Tệp) > Profile or debug APK (Phân tích hoặc gỡ lỗi tệp APK) rồi chọn tệp APK của bạn.
- Chọn thư mục Assets (Tài sản). Kích thước tệp thô và phần trăm tổng kích thước tải xuống sẽ được liệt kê cho mỗi tệp.
Xem lại thư mục Assets (Tài sản) rồi xác định nơi lưu trữ hàng loạt dữ liệu của trò chơi. Xác định xem có tài sản nào chiếm quá nhiều dung lượng (tức là lớn hơn 1% tổng dung lượng hay không). Cụ thể, hãy tìm kiếm những dữ liệu như sau:
- Tệp hình ảnh và video cỡ lớn (ví dụ: tệp PNG, JPEG và mp4): Những tệp này thường được sử dụng trong màn hình chờ, nền và biểu trưng. Những tệp này hiếm khi được sử dụng trong hầu hết trò chơi và có thể được nén thêm mà không ảnh hưởng đến trải nghiệm người dùng. Tệp PNG dạng không tổn hao (lossless) có kích thước lớn nên đặc biệt phù hợp để nén.
- Tệp phông chữ lớn (ví dụ: tệp TTF): Nếu bạn thêm tính năng hỗ trợ biểu tượng cảm xúc, thì kích thước tệp phông chữ có thể tăng đáng kể. Nếu tệp phông chữ lớn hơn vài trăm kilobyte, hãy cân nhắc các cách giảm kích thước tệp.
- Các phiên bản hoặc định dạng tệp âm thanh trùng lặp mà bạn có thể kết hợp lại với nhau.
Nếu bạn đã đưa nhiều Giao diện nhị phân của ứng dụng (ABI) vào tệp APK, hãy chuyển sang App Bundle hoặc tạo nhiều tệp APK.
Xác định kích thước của các tệp đối tượng nhị phân dùng chung (.so). Để kiểm tra tệp nhị phân xem liệu có nội dung nào có thể không cần đưa vào hay không (chẳng hạn như tệp nhật ký), bạn có thể sử dụng công cụ Bloaty McBloatface. Để biết thêm thông tin về cách tối ưu hoá các tệp nhị phân, hãy tham khảo phần biên dịch cờ và các tuỳ chọn.
Hãy xem lại tệp kê khai Android để biết định dạng đồ hoạ được hỗ trợ. Xác định xem có nhiều thẻ
<supports-gl-texture>
trong tệp APK hay không. Nếu trò chơi hỗ trợ định dạng cho nhiều GPU trong một tệp APK, thì bạn hãy cân nhắc sử dụng Basis Universal của Binomial. Hệ thống nén kết cấu GPU này tạo ra các tệp kết cấu ở định dạng trung gian, có thể nhanh chóng được chuyển mã sang GPU.
Kiểm tra kết cấu đồ hoạ và xác định cơ hội tối ưu hoá
Phần này mô tả các công cụ và phương thức cần thiết để xác định liệu kết cấu đồ hoạ dùng trong trò chơi có thể được tối ưu hoá hay không.
Để kiểm tra kết cấu trong trò chơi, hãy sử dụng Android GPU Inspector (AGI), RenderDoc hoặc Trình phân tích tài nguyên Snapdragon (chỉ dành cho GPU Qualcomm Snapdragon).
Tìm những dữ liệu sau:
- Các kết cấu có thể được đổi kích thước thành độ phân giải nhỏ hơn, chẳng hạn như kết cấu lớn cho nội dung chỉ hiển thị ở kích thước nhỏ trong trò chơi. Các kết cấu có thể thu hẹp sẽ rất tiêu tốn tài nguyên tính toán.
- Sử dụng nhiều kết cấu nhỏ có thể kết hợp thành một bản đồ kết cấu duy nhất.
- Kết cấu có thể sử dụng ít bit hơn trong các kênh màu. Đề xuất phù hợp là nội dung có một vài kết cấu đặc. Hiệu ứng chuyển màu và sắc độ yêu cầu độ phân giải cao hơn và do đó không phải là lựa chọn phù hợp.
- Khám phá các thuật toán nén kết cấu tốt hơn, qua ETC1 đến ETC2 và ASTC.
Loại bỏ cấp độ mipmap hàng đầu khi tải kết cấu trên các thiết bị cuối để tiết kiệm bộ nhớ. Hệ thống Texture Streaming của Unity có thể thực hiện việc này.
Hãy xem lại tệp kê khai Android (nếu bạn chưa thực hiện) để nắm được các định dạng đồ hoạ được hỗ trợ. Hãy xác định xem có nhiều thẻ
<supports-gl-texture>
trong tệp APK không. Nếu trò chơi hỗ trợ định dạng cho nhiều GPU trong một tệp APK, thì bạn hãy cân nhắc sử dụng Basis Universal của Binomial. Hệ thống nén kết cấu GPU này tạo ra các tệp kết cấu ở định dạng trung gian, có thể nhanh chóng được chuyển mã sang GPU.
Các đề xuất chung cho tài sản
Hãy làm theo các đề xuất sau cho tài sản trong tệp APK:
- Tài sản hình ảnh, âm thanh và video (không phải cấu trúc GPU): Xác định xem có thể đổi kích thước hoặc nén tài sản thêm nữa hay không. Thường thì tỷ lệ nén cao là chấp nhận được trong trò chơi. Tệp PNG dạng không tổn hao (lossless) có kích thước lớn nên đặc biệt phù hợp để nén.
- Nội dung hình ảnh (không phải kết cấu GPU): Hãy cân nhắc sử dụng WEBP, một định dạng nén hình ảnh để nén ở cả dạng tổn hao và không tổn hao. WEBP tổn hao có khả năng nén hình ảnh nhiều hơn từ 25% đến 34% so với JPG.
- Giảm độ phân giải của kết cấu: Việc kết cấu lớn hơn nhiều so với số pixel hiển thị trên màn hình là tình trạng sử dụng không hiệu quả không gian và tài nguyên GPU. Để thay đổi cấu trúc và xem giao diện trong khung hình mà không cần xây dựng lại trò chơi, hãy sử dụng AGI.
- Thay đổi định dạng kết cấu đồ hoạ: Sử dụng các định dạng kết cấu dùng ít bit hơn cho mỗi kênh. Ví dụ: sử dụng định dạng kết cấu 16 bit như RGB565 thay vì định dạng kết cấu 32 bit như ARGB. Để biết thêm thông tin, hãy tham khảo những nội dung sau:
Tài nguyên khác
- Một số cải tiến mới đây về Android App Bundle và lịch trình cho ứng dụng mới trên Google Play
- Giảm kích thước tệp APK trong trò chơi tức thì trên Android
- Kết cấu siêu nén có thể phân giải UGPU (bài nghiên cứu)