Android App Bundle (AAB): Hướng dẫn đầy đủ dành cho nhà phát triển và người dùng

A sealed parcel labeled AAB on a developer desk, illustrating the Android App Bundle format

Vào tháng 8 năm 2021, Google đã đưa ra một quyết định làm thay đổi căn bản cách phân phối ứng dụng Android: tất cả ứng dụng mới được gửi lên Cửa hàng Google Play phải sử dụng định dạng Gói ứng dụng Android (AAB) thay vì APK truyền thống. Sự thay đổi này ảnh hưởng đến các nhà phát triển, người dùng và toàn bộ hệ sinh thái phân phối ứng dụng của bên thứ ba. Nhưng chính xác thì App Bundle là gì, nó hoạt động như thế nào và tại sao bạn nên quan tâm?

Hướng dẫn này bao gồm mọi thứ, từ nội dung kỹ thuật của định dạng AAB cho đến những ý nghĩa thực tế dành cho người dùng muốn chia sẻ ứng dụng với bạn bè hoặc cài đặt chúng trên các thiết bị không có quyền truy cập Cửa hàng Play.

Gói ứng dụng Android là gì?

Android App Bundle là định dạng xuất bản chứa tất cả mã và tài nguyên được biên dịch của ứng dụng nhưng trì hoãn việc tạo APK có thể cài đặt cuối cùng lên Google Play. Hãy coi nó như một mẫu chính mà từ đó các máy chủ của Google tạo ra các gói dành riêng cho thiết bị, được tối ưu hóa một cách nhanh chóng.

Không giống như APK, là gói sẵn sàng cài đặt, tệp AAB không thể được cài đặt trực tiếp trên thiết bị. Đó là một cấu phần phần mềm xây dựng được tải lên Cửa hàng Play, nơi cơ sở hạ tầng của Google xử lý nó và tạo ra các APK phù hợp cho từng cấu hình thiết bị.

Phần mở rộng tệp là .aab và bên trong nó sử dụng định dạng bộ đệm giao thức kết hợp với cấu trúc giống ZIP. Nó chứa mã byte DEX, tài nguyên, nội dung, thư viện gốc của ứng dụng và tệp siêu dữ liệu gói đặc biệt cho Google Play biết cách phân chia nội dung.

Tại sao lại có gói ứng dụng bắt buộc của Google

Động lực chính đằng sau Gói ứng dụng là giảm kích thước tải xuống ứng dụng. Một ứng dụng Android thông thường cần hỗ trợ nhiều mật độ màn hình (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi), nhiều kiến trúc CPU (armeabi-v7a, arm64-v8a, x86, x86_64) và nhiều ngôn ngữ. Trong mô hình APK truyền thống, tất cả các tài nguyên này được nhóm thành một tệp duy nhất, mặc dù bất kỳ thiết bị cụ thể nào cũng chỉ cần một phần nhỏ trong số đó.

Hãy xem xét một trò chơi bao gồm các thư viện gốc cho bốn cấu trúc và kết cấu CPU cho năm mật độ màn hình. APK phổ quát có thể có dung lượng 200 MB nhưng phiên bản dành riêng cho thiết bị chỉ chứa kiến trúc và mật độ liên quan có thể là 80 MB. Đó là giảm 60% kích thước tải xuống.

Google báo cáo rằng các ứng dụng sử dụng Gói ứng dụng có kích thước nhỏ hơn trung bình 15% so với các ứng dụng APK phổ biến tương đương. Đối với các ứng dụng và trò chơi lớn, mức tiết kiệm có thể đáng kể hơn nhiều. Tải xuống nhỏ hơn có nghĩa là cài đặt nhanh hơn, tiêu thụ ít băng thông hơn và ít cài đặt bị bỏ dở hơn do lo ngại về kích thước.

Cách gói ứng dụng hoạt động nội bộ

Cấu trúc gói

Tệp AAB được tổ chức thành các mô-đun, trong đó mỗi mô-đun chứa mã, tài nguyên và nội dung riêng. Cấu trúc phổ biến nhất bao gồm:

  • Mô-đun cơ sở: Chứa mã ứng dụng cốt lõi và tài nguyên mà mọi thiết bị đều cần. Cái này luôn được cài đặt.
  • Phân chia cấu hình: Các phần riêng biệt dành cho tài nguyên ngôn ngữ, tài nguyên mật độ màn hình và thư viện gốc ABI (kiến trúc CPU).
  • Các mô-đun tính năng động: Các mô-đun tùy chọn có thể được tải xuống theo yêu cầu sau lần cài đặt đầu tiên.
  • Gói tài sản: Các nội dung lớn như cấp độ trò chơi hoặc phương tiện có thể được phân phối tại thời điểm cài đặt, theo yêu cầu hoặc ở chế độ nền.

Tách thế hệ APK

Khi người dùng tải xuống ứng dụng từ Cửa hàng Play, máy chủ của Google sẽ kiểm tra cấu hình của thiết bị và tạo một bộ APK phân tách phù hợp với thiết bị cụ thể đó. Một cài đặt điển hình có thể bao gồm:

  • base.apk, Mã ứng dụng cốt lõi và các tài nguyên thiết yếu
  • split_config.arm64_v8a.apk, Thư viện gốc cho CPU của thiết bị
  • split_config.xxhdpi.apk, Tài nguyên về mật độ màn hình của thiết bị
  • split_config.en.apk, Tài nguyên ngôn ngữ cho ngôn ngữ của người dùng

Các APK phân tách này được cài đặt cùng nhau dưới dạng một ứng dụng logic duy nhất. Trình quản lý gói Android coi chúng là một ứng dụng nhưng chúng là các tệp vật lý riêng biệt trên thiết bị. Đây là cơ chế cho phép tiết kiệm kích thước.

Phân phối động

Một trong những tính năng mạnh mẽ nhất của Gói ứng dụng là phân phối động. Nhà phát triển có thể đánh dấu một số tính năng nhất định là có thể tải xuống theo yêu cầu. Ví dụ: một ứng dụng chỉnh sửa ảnh có thể bao gồm các bộ lọc nâng cao dưới dạng mô-đun tính năng động. Những người dùng không bao giờ sử dụng các bộ lọc đó sẽ không cần tải chúng xuống, giúp tiết kiệm dung lượng lưu trữ.

Các mô-đun tính năng động được tải xuống và cài đặt thông qua thư viện Play Core trong thời gian chạy. Ứng dụng có thể kiểm tra xem mô-đun đã được cài đặt chưa và yêu cầu tải xuống mô-đun đó khi cần, để người dùng trải nghiệm chức năng mới dưới dạng tải xuống nhỏ trong ứng dụng thay vì cài đặt lại đầy đủ.

AAB so với APK: Sự khác biệt chính

Hiểu được sự khác biệt giữa các định dạng này sẽ giúp làm rõ khi nào mỗi định dạng phù hợp:

  • Các tệp APK Khả năng cài đặt: có thể được cài đặt trực tiếp trên mọi thiết bị Android. Các tệp AAB không thể được cài đặt trực tiếp và phải được xử lý trước.
  • Kích cỡ: APK phổ quát chứa tài nguyên cho tất cả các cấu hình. AAB cho phép phân phối theo thiết bị cụ thể, dẫn đến lượt tải xuống nhỏ hơn.
  • Ký kết: Với APK, nhà phát triển ký gói có thể cài đặt cuối cùng. Với AAB, nhà phát triển ký gói và Google ký lại các APK đã tạo bằng tính năng Ký ứng dụng của Play.
  • APK Phân bổ: có thể được phân phối qua bất kỳ kênh nào. AAB được thiết kế chủ yếu cho Cửa hàng Play, mặc dù các công cụ như Bundletool có thể tạo APK từ chúng cục bộ.
  • Khả năng chia sẻ: Bạn có thể dễ dàng chia sẻ tệp APK với người khác. Việc chia sẻ ứng dụng được cài đặt từ AAB yêu cầu thu thập tất cả các APK phân tách, việc này phức tạp hơn.

Tranh cãi về việc ký kết

Một trong những khía cạnh gây tranh luận nhiều nhất của quy định bắt buộc dùng AAB là Ký ứng dụng Play. Khi nhà phát triển tải lên tệp AAB, Google sẽ nắm giữ khóa ký được dùng để ký các tệp APK cuối cùng phân phối tới người dùng. Điều này có nghĩa là về mặt kỹ thuật, Google có khả năng sửa đổi nội dung APK trước khi ký và phân phối.

Google cho rằng điều này là cần thiết vì họ cần ký các APK phân tách mà họ tạo ra. Nhà phát triển giữ lại khóa tải lên để xác thực nội dung tải lên của họ nhưng khóa ký ứng dụng thực tế do cơ sở hạ tầng của Google quản lý.

Đối với hầu hết các nhà phát triển, đây là một sự đánh đổi hợp lý. Google cung cấp các dịch vụ sao lưu và khôi phục khóa và loại bỏ nguy cơ mất khóa (điều này sẽ ngăn chặn vĩnh viễn các bản cập nhật ứng dụng). Tuy nhiên, các nhà phát triển tập trung vào quyền riêng tư và những người ủng hộ nguồn mở đã nêu lên mối lo ngại về việc tập trung niềm tin này.

Điều này có ý nghĩa gì đối với người dùng chia sẻ ứng dụng

Việc chuyển sang App Bundle có ý nghĩa quan trọng đối với những người dùng muốn chia sẻ ứng dụng bên ngoài Play Store:

Trích xuất ứng dụng đã cài đặt

Khi bạn trích xuất một ứng dụng được cài đặt từ AAB, bạn sẽ không nhận được một tệp APK nào. Thay vào đó, bạn nhận được một bộ sưu tập các APK phân chia. Các phần tách này dành riêng cho từng thiết bị, nghĩa là ứng dụng được trích xuất từ điện thoại có bộ xử lý ARM64 và màn hình xxhdpi sẽ không hoạt động trên thiết bị có cấu hình khác.

Định dạng XAPK và APKS

Để giải quyết thách thức chia sẻ APK phân tách, các định dạng vùng chứa như XAPK và APKS đã được tạo. Các định dạng này gộp tất cả các APK đã tách lại với nhau thành một tệp có thể tải xuống. Khi bạn gặp tệp XAPK, tệp đó có thể chứa ứng dụng ban đầu được phân phối dưới dạng Gói ứng dụng.

Công cụ chuyển đổi XAPKS sang APK của chúng tôi có thể giúp bạn trích xuất APK cơ sở từ các định dạng vùng chứa này. Tuy nhiên, hãy nhớ rằng chỉ riêng APK cơ sở có thể không chứa tất cả tài nguyên cần thiết để ứng dụng hoạt động chính xác trên mọi thiết bị, vì mật độ và tài nguyên dành riêng cho ABI có thể nằm trong các APK phân tách.

Sử dụng gói công cụ

Google cung cấp một công cụ nguồn mở có tên bundletool có thể tạo APK từ tệp AAB cục bộ. Các nhà phát triển có thể sử dụng điều này để tạo các APK phổ quát để thử nghiệm hoặc phân phối thay thế. Lệnh trông giống như:

bundletool build-apks --bundle=app.aab --output=app.apks --mode=universal

Điều này tạo ra một APK chung chứa tất cả tài nguyên cho tất cả cấu hình. Nó sẽ lớn hơn bản dựng dành riêng cho thiết bị nhưng hoạt động trên mọi thiết bị. Đây là cách tiếp cận được Công cụ chuyển đổi AAB sang APK của chúng tôi sử dụng.

Tác động đến các cửa hàng ứng dụng thay thế

Nhiệm vụ của AAB chủ yếu ảnh hưởng đến Cửa hàng Google Play. Các cửa hàng ứng dụng thay thế và kênh phân phối trực tiếp vẫn có thể chấp nhận tệp APK. Các nhà phát triển muốn phân phối bên ngoài Play có thể tiếp tục xây dựng các APK phổ quát cùng với các bản tải lên AAB của họ.

Tuy nhiên, một số nhà phát triển chỉ xây dựng AAB và hoàn toàn dựa vào Play để phân phối. Điều này có nghĩa là các ứng dụng từ các nhà phát triển này khó có được hơn bên ngoài hệ sinh thái Cửa hàng Play. Kho lưu trữ ứng dụng của bên thứ ba đã điều chỉnh bằng cách lưu trữ các bộ sưu tập APK phân tách (dưới dạng tệp XAPK hoặc APKS) hoặc bằng cách sử dụng Bundletool để tạo các APK chung.

Các mô-đun tính năng động trong thực tế

Các mô-đun tính năng động thể hiện một trong những khả năng thú vị nhất của định dạng Gói ứng dụng. Dưới đây là một số trường hợp sử dụng trong thế giới thực:

  • Tính năng máy ảnh: Một ứng dụng có thể bao gồm các bộ lọc AR dưới dạng mô-đun động, chỉ được tải xuống khi người dùng truy cập tính năng máy ảnh lần đầu tiên.
  • Gói ngôn ngữ: Dữ liệu dịch cho các ngôn ngữ ít phổ biến hơn có thể được cung cấp theo yêu cầu thay vì đi kèm với mỗi lần cài đặt.
  • Trò chơi Cấp độ trò chơi: có thể cung cấp nội dung bổ sung khi người chơi tiến bộ, giữ cho lượt tải xuống ban đầu ở mức nhỏ.
  • Công cụ chuyên nghiệp: Các tính năng nâng cao trong ứng dụng năng suất chỉ có thể được cung cấp cho những người dùng cần chúng.

Đối với người dùng, điều này có nghĩa là dung lượng cài đặt của ứng dụng có thể tăng dần theo thời gian khi các mô-đun động được tải xuống. Điều đó cũng có nghĩa là việc chia sẻ một ứng dụng như vậy yêu cầu phải bao gồm tất cả các mô-đun đã tải xuống, điều này càng làm phức tạp thêm quá trình trích xuất.

Các phương pháp hay nhất dành cho nhà phát triển

Nếu bạn đang phát triển ứng dụng Android thì đây là các đề xuất để làm việc với App Bundle một cách hiệu quả:

  1. Luôn kiểm tra bằng Bundletool cục bộ trước khi tải lên Play. Tạo APK dành riêng cho thiết bị và xác minh chúng hoạt động chính xác.
  2. Sử dụng kênh thử nghiệm nội bộ của Play Console để xác minh rằng các APK phân tách được cài đặt và hoạt động chính xác trên các thiết bị thực.
  3. Hãy cân nhắc việc cung cấp APK phổ quát dành cho các kênh phân phối thay thế nếu cơ sở người dùng của bạn mở rộng ra ngoài Cửa hàng Play.
  4. Hãy chú ý đến ranh giới mô-đun tính năng động. Các tính năng được sử dụng thường xuyên phải có trong mô-đun cơ sở, không phải mô-đun động.
  5. Thử nghiệm trên các thiết bị có cấu hình khác nhau để đảm bảo rằng việc phân chia cấu hình được tạo chính xác và không thiếu tài nguyên.
  6. Giữ khóa tải lên của bạn an toàn. Trong khi Google quản lý khóa ký ứng dụng thì khóa tải lên của bạn sẽ xác thực danh tính của bạn với tư cách là nhà phát triển.

Tương lai của phân phối ứng dụng

Định dạng Gói ứng dụng tiếp tục phát triển. Google đã giới thiệu các tính năng như Play Asset Delivery cho nội dung trò chơi lớn, SDK Thời gian chạy cho SDK quảng cáo và hỗ trợ cải tiến cho cấu hình Wear OS và Android TV. Xu hướng hướng tới việc phân phối các thành phần ứng dụng theo yêu cầu, chi tiết hơn.

Đối với người dùng, điều này có nghĩa là khái niệm về một tệp ứng dụng độc lập, duy nhất đang trở nên ít phổ biến hơn đối với các ứng dụng trên Cửa hàng Play. Việc hiểu các định dạng như XAPK, APKS và các công cụ có sẵn để làm việc với chúng ngày càng trở nên quan trọng đối với bất kỳ ai quản lý ứng dụng bên ngoài luồng Cửa hàng Play tiêu chuẩn.

Khi nào nên giữ AAB so với khi nào nên tạo APK phổ quát

Android App Bundle thể hiện sự thay đổi cơ bản về cách ứng dụng được đóng gói và phân phối. Mặc dù nó mang lại lợi ích thực sự về kích thước tải xuống và hiệu quả phân phối, nhưng nó cũng gây ra sự phức tạp cho người dùng chia sẻ ứng dụng hoặc cài đặt chúng từ các nguồn thay thế. Hiểu cách hoạt động của AAB, cách chúng tạo APK phân tách và những công cụ có sẵn để chuyển đổi giữa các định dạng sẽ cung cấp cho bạn những gì bạn cần để chọn định dạng phù hợp và tự tin chuyển đổi giữa chúng.

Các nhà phát triển tiếp cận AAB để tối ưu hóa cách phân phối ứng dụng; hầu hết người dùng hàng ngày chỉ gặp phải vấn đề này khi họ cố cài đặt thứ gì đó trên thiết bị không có quyền truy cập Cửa hàng Play. Dù bằng cách nào, điều đáng ghi nhớ rất đơn giản: AAB là định dạng xuất bản, không phải định dạng cài đặt và có những công cụ thu hẹp khoảng cách giữa hai định dạng này.

Được thiết kế và ghi lại bởi Mst Shaefale Nhà phát triển chính và Kiến trúc sư gói Android • Đã xác minh trên Android 12–15

Bà Shaefale duy trì việc hợp nhất XAPK/APKS phía máy khách, trình phân tích cú pháp tệp kê khai nhị phân và các công cụ ký APK v1+v2 tại xapktoapk.com. Phát hiện lệnh đã lỗi thời hoặc thay đổi hệ điều hành? Gửi một ghi chú biên tập.