Một APK Android thường chứa những thứ này.
assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex
Sau khi cài đặt, tệp APK được sao chép vào /data/app
và classes.dex
được trích xuất và "tối ưu hóa" bằng cách chạy dex2oat
trên nó (trên Android 5+ lib/
cũng được trích xuất). Kết quả của việc tối ưu hóa được lưu trữ trong /data/dalvik-cache/
nên ứng dụng chỉ cần được tối ưu hóa một lần cho mỗi lần cài đặt hoặc cập nhật . Mọi thứ khác được giữ trong APK. Vì vậy, câu trả lời đầu tiên rất rõ ràng: Những thứ như assets
và res
yêu cầu của ứng dụng phải được cung cấp và chúng nằm trong APK. Tệp APK được lưu giữ cho mục đích hỗ trợ. Nếu bạn xóa APK, ứng dụng chắc chắn sẽ không bắt đầu. (Ứng dụng: Tài sản của tôi đâu?)
Thứ hai, Google Play hỗ trợ cho "Delta Update" thêm rất lâu rồi . Trong thủ tục cập nhật delta, sự khác biệt giữa gói cũ và gói mới được tính toán. Sau đó, GP tải xuống "Delta" và áp dụng các thay đổi cho APK gốc để mang lại APK được cập nhật, do đó giảm kích thước tải xuống.
Một APK luôn được ký. Điều này có thể ngăn chặn sửa đổi độc hại cho gói. Bạn chắc chắn không muốn cài đặt một ứng dụng đã được sửa đổi mà không biết những gì đã được thay đổi hoặc liệu virus đã được tiêm hay chưa. Các META-INF/
bên APK làm việc cho mục đích này. Những thay đổi không chính thức sẽ dẫn đến chữ ký không phù hợp và hệ thống Android sẽ từ chối cài đặt ứng dụng đã được sửa đổi.
Ngoài ra, khi bạn cập nhật HĐH Android, tất cả các tệp dex sẽ được "tối ưu hóa" lại để bạn không cần phải cài đặt lại từng cái một. Như đã nói ở trên, tối ưu hóa yêu cầu classes.dex
tập tin từ gói ban đầu.