Hệ sinh thái Android sử dụng nhiều định dạng tệp khác nhau để đóng gói, phân phối và lưu trữ dữ liệu ứng dụng. Nếu bạn đã từng tải xuống một ứng dụng từ nguồn của bên thứ ba, bạn có thể gặp phải các phần mở rộng tệp ngoài APK quen thuộc. Mỗi định dạng như XAPK (APKPure), APKS, APKM, AAB và OBB đều phục vụ một mục đích cụ thể trong vòng đời ứng dụng Android.
Hướng dẫn này nhằm mục đích tham khảo đầy đủ cho mọi định dạng tệp Android chính. Các nhà phát triển, người dùng thành thạo tải ứng dụng và những độc giả tò mò chỉ muốn biết những tệp này thực sự chứa những gì sẽ tìm thấy từng định dạng được giải thích bằng ngôn ngữ đơn giản bên dưới.
APK: Bộ gói Android
APK là định dạng tệp nền tảng cho các ứng dụng Android. Đây là định dạng cài đặt tiêu chuẩn kể từ khi Android ra đời và vẫn là định dạng mà hệ điều hành Android hiểu rõ ràng để cài đặt ứng dụng.
Nó chứa gì
Tệp APK về cơ bản là một kho lưu trữ ZIP có cấu trúc bên trong cụ thể:
- AndroidManifest.xml, Tệp XML nhị phân khai báo tên gói, thành phần, quyền và yêu cầu của ứng dụng
- classes.dex (và classes2.dex, v.v.), Mã byte Dalvik được biên dịch chứa mã Java/Kotlin của ứng dụng
- resources.arsc, ID tài nguyên ánh xạ bảng tài nguyên được biên dịch tới các giá trị của chúng
- res/, Thư mục chứa các tài nguyên như bố cục, đối tượng có thể vẽ và chuỗi được tham chiếu bằng ID
- assets/, Tệp nội dung thô được ứng dụng truy cập trong thời gian chạy thông qua Trình quản lý nội dung
- lib/, Thư viện gốc được sắp xếp theo kiến trúc CPU (ví dụ: lib/arm64-v8a/)
- META-INF/, Tệp chữ ký và thông tin chứng chỉ
Khi bạn gặp nó
Tệp APK là những gì bạn tải xuống khi tải ứng dụng từ các nguồn của bên thứ ba. Chúng cũng là những thứ được cài đặt trên thiết bị của bạn từ Cửa hàng Play, mặc dù các bản cài đặt Cửa hàng Play hiện đại thường sử dụng APK phân tách được tạo từ Gói ứng dụng.
Làm thế nào để xử lý nó
Các tệp APK có thể được cài đặt trực tiếp trên Android bằng cách mở chúng bằng trình quản lý tệp hoặc sử dụng adb install. Bạn cũng có thể kiểm tra nội dung của chúng bằng cách đổi tên tiện ích mở rộng thành .zip và giải nén hoặc bằng cách sử dụng Trình xác minh APK của chúng tôi để kiểm tra chữ ký và siêu dữ liệu.
AAB: Gói ứng dụng Android
Android App Bundle là định dạng xuất bản của Google dành cho Cửa hàng Play. Kể từ tháng 8 năm 2021, tất cả ứng dụng mới trên Cửa hàng Play phải được gửi dưới dạng AAB thay vì APK.
Nó chứa gì
Tệp AAB sử dụng định dạng dựa trên bộ đệm giao thức và chứa:
- Mã ứng dụng Mô-đun cơ sở: Core và tài nguyên cần thiết trên mọi thiết bị
- Tài nguyên Phân chia cấu hình: được sắp xếp theo mật độ màn hình, kiến trúc CPU và ngôn ngữ
- Các mô-đun tính năng động: Các tính năng tùy chọn có thể được tải xuống theo yêu cầu
- Gói siêu dữ liệu: Hướng dẫn dành cho Google Play về cách tạo APK dành riêng cho thiết bị
Khi bạn gặp nó
Là người dùng thông thường, bạn thường không gặp trực tiếp các tệp AAB. Chúng được các nhà phát triển sử dụng trong quá trình xây dựng và tải lên. Tuy nhiên, nếu bạn nhận được tệp AAB (có thể từ các tạo phẩm xây dựng của dự án nguồn mở), bạn cần chuyển đổi tệp đó sang định dạng APK trước khi cài đặt.
Làm thế nào để xử lý nó
Sử dụng tiện ích dòng lệnh bundletool của Google hoặc Công cụ chuyển đổi AAB sang APK của chúng tôi để tạo APK có thể cài đặt từ tệp AAB. Quá trình chuyển đổi sẽ tạo APK phổ quát (lớn hơn, hoạt động ở mọi nơi) hoặc APK dành riêng cho thiết bị (nhỏ hơn, nhắm mục tiêu theo thiết bị).
XAPK: APK mở rộng
XAPK là định dạng chứa được phổ biến bởi ứng dụng APK, gói APK cùng với các tệp dữ liệu OBB được liên kết của nó hoặc chia cấu hình APK thành một gói có thể tải xuống duy nhất.
Nó chứa gì
Tệp XAPK là một kho lưu trữ ZIP chứa:
- Tệp APK cơ sở (ứng dụng chính)
- Tệp OBB (dữ liệu mở rộng cho trò chơi và ứng dụng lớn)
- Tùy chọn chia nhỏ file APK cho các cấu hình thiết bị khác nhau
- Tệp manifest.json mô tả nội dung gói và hướng dẫn cài đặt
- Một tập tin biểu tượng cho mục đích hiển thị
Khi bạn gặp nó
Bạn gặp phải các tệp XAPK khi tải xuống các ứng dụng hoặc trò chơi lớn từ kho ứng dụng của bên thứ ba. Các trò chơi yêu cầu tệp dữ liệu bổ sung (trước đây được phân phối dưới dạng tệp OBB) thường được đóng gói dưới dạng XAPK để đơn giản hóa quá trình tải xuống thành một tệp duy nhất.
Làm thế nào để xử lý nó
Trình cài đặt gói mặc định của Android không thể cài đặt trực tiếp các tệp XAPK. Bạn cần có ứng dụng cài đặt XAPK chuyên dụng hoặc bạn có thể sử dụng Công cụ chuyển đổi XAPKS sang APK của chúng tôi để trích xuất APK cơ sở. Đối với các trò chơi yêu cầu dữ liệu OBB, bạn cũng sẽ cần trích xuất và đặt các tệp OBB vào đúng thư mục bằng Trình trích xuất OBB của chúng tôi.
APK: Bộ APK
Định dạng APKS là đầu ra của Bundletool của Google khi tạo APK dành riêng cho thiết bị từ tệp AAB. Nó cũng được một số công cụ sao lưu ứng dụng sử dụng để lưu trữ các bản cài đặt APK phân chia.
Nó chứa gì
Tệp APKS là một kho lưu trữ ZIP chứa:
- toc.pb, Bảng nội dung vùng đệm giao thức mô tả cấu trúc phân chia
- splits/, Thư mục chứa APK cơ sở và tất cả các APK phân chia cấu hình
- Tùy chọn, các APK độc lập dành cho các thiết bị không hỗ trợ cài đặt chia tách
Khi bạn gặp nó
Bạn gặp phải các tệp APKS khi sử dụng Bundletool cục bộ, khi sao lưu các ứng dụng được cài đặt từ Cửa hàng Play hoặc khi tải xuống từ kho lưu trữ nhất định của bên thứ ba có chức năng duy trì cấu trúc APK phân tách.
Làm thế nào để xử lý nó
Bạn có thể cài đặt các tệp APKS bằng lệnh install-apks của Bundletool hoặc chuyển đổi chúng thành một APK duy nhất bằng Hợp nhất APKS thành APK của chúng tôi. Lưu ý rằng việc hợp nhất các APK phân tách thành một APK chung có thể làm tăng kích thước tệp vì tất cả tài nguyên cấu hình được kết hợp.
APKM: Gói APKMirror
APKM là định dạng vùng chứa độc quyền do APKMirror tạo ra để phân phối các ứng dụng bao gồm nhiều APK phân tách. Nó phục vụ mục đích tương tự như XAPK và APKS nhưng sử dụng cấu trúc riêng của APKMirror.
Nó chứa gì
Tệp APKM là tệp lưu trữ ZIP chứa:
- Tệp APK cơ sở
- Chia nhỏ tệp APK cho các cấu hình khác nhau (mật độ, ABI, ngôn ngữ)
- Tệp siêu dữ liệu mô tả cấu trúc gói
Khi bạn gặp nó
Bạn chỉ gặp các tệp APKM khi tải xuống từ APKMirror. Trang web sử dụng định dạng này cho các ứng dụng được phân phối dưới dạng Gói ứng dụng trên Cửa hàng Play và do đó bao gồm nhiều APK phân chia.
Làm thế nào để xử lý nó
Các tệp APKM yêu cầu ứng dụng Trình cài đặt APKMirror để cài đặt trực tiếp hoặc bạn có thể trích xuất nội dung (vì đây là tệp ZIP) và cài đặt các APK phân tách theo cách thủ công bằng lệnh install-multiple của ADB. APK cơ sở cũng có thể được trích xuất và cài đặt độc lập, mặc dù một số chức năng có thể bị hạn chế nếu không có sự phân chia cấu hình.
OBB: Blob nhị phân mờ đục
Tệp OBB là các tệp mở rộng được các ứng dụng Android (chủ yếu là trò chơi) sử dụng để lưu trữ lượng lớn dữ liệu vượt quá giới hạn kích thước APK của Cửa hàng Play. Mặc dù Google đã thay thế phần lớn hệ thống này bằng Play Asset Delivery nhưng nhiều ứng dụng hiện có vẫn sử dụng tệp OBB.
Nó chứa gì
Tệp OBB có thể chứa bất kỳ loại dữ liệu nào mà ứng dụng cần:
- Kết cấu trò chơi và mô hình 3D
- Tập tin âm thanh và nhạc phim
- Nội dung video
- Dữ liệu cấp độ và bản đồ
- Bất kỳ dữ liệu nhị phân lớn nào mà nhà phát triển chọn lưu trữ bên ngoài
Định dạng của dữ liệu trong tệp OBB hoàn toàn phụ thuộc vào nhà phát triển. Một số sử dụng nén ZIP, một số khác sử dụng định dạng nhị phân tùy chỉnh. Chữ "Opaque" trong tên phản ánh rằng Android coi tệp này là một hộp đen.
Khi bạn gặp nó
Các tệp OBB gặp phải khi tải các trò chơi lớn hoặc khi chúng được gói trong các gói XAPK. Chúng được lưu trữ tại /Android/obb/[package.name]/ trên bộ nhớ dùng chung của thiết bị.
Làm thế nào để xử lý nó
Các tệp OBB phải được đặt vào đúng thư mục để ứng dụng tìm thấy chúng. Tên tệp thường tuân theo mẫu main.[version].[package.name].obb hoặc patch.[version].[package.name].obb. Sử dụng Trình trích xuất OBB của chúng tôi để trích xuất các tệp OBB từ các gói XAPK.
DEX: Có thể thực thi Dalvik
Tệp DEX chứa mã byte được biên dịch chạy trên môi trường thời gian chạy của Android. Chúng được tìm thấy bên trong các tệp APK nhưng cũng có thể tồn tại độc lập trong quá trình phát triển và gỡ lỗi.
Nó chứa gì
Một tệp DEX chứa:
- Mã byte Java/Kotlin được biên dịch ở định dạng lệnh Dalvik
- Hằng chuỗi và định nghĩa kiểu
- Tham chiếu phương thức và trường
- Định nghĩa lớp và hệ thống phân cấp của chúng
Chi tiết kỹ thuật
Một tệp DEX có giới hạn tham chiếu phương thức là 65.536 ("giới hạn 64K"). Các ứng dụng vượt quá giới hạn này sẽ sử dụng nhiều tệp DEX (classes.dex, classes2.dex, v.v.), một kỹ thuật được gọi là multidex. Các công cụ xây dựng hiện đại tự động xử lý việc này.
Tệp ODEX, VDEX và ART
Đây là các phiên bản tối ưu hóa của tệp DEX được Android Runtime tạo trong hoặc sau khi cài đặt:
- ODEX (DEX được tối ưu hóa): Chứa mã máy gốc được biên dịch trước cho các phương thức được sử dụng thường xuyên. Được tạo trong quá trình bảo trì nhàn rỗi dựa trên hồ sơ sử dụng.
- VDEX (DEX đã được xác minh): Chứa mã byte DEX đã được xác minh với kết quả xác minh được tính toán trước. Điều này tăng tốc độ khởi động và khởi chạy ứng dụng tiếp theo bằng cách bỏ qua xác minh lại.
- ART (Hình ảnh thời gian chạy Android): Chứa các đối tượng lớp được khởi tạo trước và dữ liệu vùng heap. Điều này cho phép bộ thực thi bỏ qua việc tải và khởi tạo lớp đối với các lớp khung chung trong quá trình khởi động.
Những tệp này do hệ thống tạo ra và không phải thứ mà người dùng thường tương tác trực tiếp. Chúng được lưu trữ trong /data/dalvik-cache/ hoặc cùng với APK trong /data/app/.
SO: Đối tượng được chia sẻ (Thư viện gốc)
Các tệp có phần mở rộng .so là các thư viện chia sẻ gốc được biên dịch cho các kiến trúc CPU cụ thể. Chúng chứa mã máy được viết bằng C, C++ hoặc Rust chạy trực tiếp trên bộ xử lý mà không cần thời gian chạy Dalvik/ART.
Các biến thể kiến trúc
- armeabi-v7a, ARM 32 bit (hầu hết các thiết bị cũ)
- arm64-v8a, ARM 64-bit (hầu hết các điện thoại hiện đại)
- x86, Intel/AMD 32-bit (một số máy tính bảng và trình mô phỏng)
- x86_64, Intel/AMD 64-bit (Chromebook và trình mô phỏng)
Khi APK chứa thư viện gốc, APK đó phải bao gồm kiến trúc chính xác cho thiết bị đích. Nếu đưa vào kiến trúc sai, ứng dụng sẽ gặp sự cố với UnsatisfiedLinkError.
Tệp XML trong Android
Android sử dụng XML rộng rãi nhưng ở hai dạng khác nhau:
XML nhị phân
Bên trong tệp APK, tài nguyên XML (bố cục, tệp kê khai, tệp chuỗi) được lưu trữ ở định dạng nhị phân được biên dịch có tên là AXML. Định dạng này nhỏ gọn hơn và phân tích cú pháp nhanh hơn XML văn bản. Các công cụ như aapt2 hoặc apktool có thể dịch ngược XML nhị phân trở lại văn bản có thể đọc được.
Văn bản XML
Trong quá trình phát triển, các tệp XML có định dạng văn bản tiêu chuẩn. Quá trình xây dựng sẽ biên dịch chúng thành XML nhị phân để đưa vào APK. Các tệp cấu hình như network_security_config.xml và các tệp tài nguyên trong thư mục res/ bắt đầu dưới dạng XML văn bản.
Tệp ánh xạ ProGuard/R8
Mặc dù không phải là định dạng dành riêng cho Android nhưng các tệp ánh xạ (mapping.txt rất quan trọng để hiểu các ứng dụng bị xáo trộn). Khi các nhà phát triển sử dụng các công cụ rút gọn mã như R8, tên lớp và phương thức sẽ được thay thế bằng các mã định danh ngắn gọn, vô nghĩa. Tệp ánh xạ ghi lại bản dịch tên gốc sang tên bị xáo trộn, cần thiết để đọc báo cáo sự cố.
Định dạng sao lưu Android (AB)
Các tệp có phần mở rộng .ab là kho lưu trữ sao lưu Android được tạo bởi adb backup. Chúng chứa kho lưu trữ tar (được nén và mã hóa tùy chọn) của thư mục dữ liệu của ứng dụng. Định dạng này không được dùng nữa vì các giải pháp sao lưu dựa trên đám mây nhưng vẫn được một số công cụ sao lưu sử dụng.
Hình ảnh IMG và phân vùng
Mặc dù không liên quan đến ứng dụng nhưng hình ảnh hệ thống Android sử dụng một số định dạng đáng đề cập:
- hệ thống.img: Phân vùng hệ thống chỉ đọc chứa khung Android và các ứng dụng được cài đặt sẵn
- boot.img: Chứa nhân Linux và đĩa ram ban đầu
- nhà cung cấp.img: Trình điều khiển và chương trình cơ sở dành riêng cho phần cứng
- siêu.img: Vùng chứa phân vùng động được sử dụng trong các thiết bị hiện đại (Android 10+)
Bảng so sánh định dạng
Dưới đây là tài liệu tham khảo nhanh so sánh các định dạng phân phối ứng dụng chính:
- APK: Tệp đơn, có thể cài đặt trực tiếp, phổ biến (bao gồm tất cả các cấu hình), kích thước lớn hơn
- Định dạng xuất bản AAB:, không thể cài đặt trực tiếp, yêu cầu Play Store xử lý
- XAPK: Container (APK + OBB/splits), yêu cầu trình cài đặt hoặc giải nén, được sử dụng bởi APK
- APK: Container (tách APK), định dạng Bundletool, yêu cầu trình cài đặt hoặc sáp nhập
- Vùng chứa APKM: (APK phân tách), định dạng APKMirror, yêu cầu trình cài đặt của chúng
Chọn công cụ phù hợp
Tùy thuộc vào định dạng bạn đang làm việc, các công cụ khác nhau sẽ phù hợp:
- Có XAPK? Sử dụng Công cụ chuyển đổi XAPKS sang APK của chúng tôi để giải nén APK có thể cài đặt
- Có AAB không? Sử dụng Công cụ chuyển đổi AAB sang APK của chúng tôi để tạo APK phổ quát
- Có APK chia nhỏ (APKS)? Sử dụng Hợp nhất APKS thành APK của chúng tôi để kết hợp chúng
- Cần xác minh APK? Sử dụng Trình xác minh APK của chúng tôi để kiểm tra chữ ký
- Cần tệp OBB từ XAPK? Sử dụng Trình trích xuất OBB của chúng tôi để giải nén các tệp mở rộng
Bạn nên sử dụng định dạng gói Android nào?
Các định dạng tệp đa dạng của hệ sinh thái Android phản ánh sự phát triển của nền tảng từ các APK một tệp đơn giản đến các hệ thống phân phối mô-đun phức tạp. Mỗi định dạng tồn tại để giải quyết một vấn đề cụ thể: AAB giảm kích thước tải xuống, XAPK đơn giản hóa việc phân phối ứng dụng nhiều tệp, OBB xử lý dữ liệu trò chơi lớn và APK phân tách cho phép tối ưu hóa dành riêng cho thiết bị.
Khi bạn hiểu các định dạng này, bạn có thể xử lý bất kỳ gói Android nào bạn chạy, cho dù bạn đang tải ứng dụng, sao lưu thiết bị hay phát triển ứng dụng của riêng mình. Điểm đáng chú ý là hầu hết các định dạng này cuối cùng đều là các thùng chứa tệp APK ở nhiều cấu hình khác nhau và với các công cụ phù hợp, bạn luôn có thể trích xuất những gì mình cần.