Bên trong file APK có gì?
Trước khi tìm cách loại bỏ các phần thừa thãi trong file APK, hãy cùng giải phẫu file này ra nhé. Bản chất file APK là 1 loại file nén (ZIP), bao gồm toàn bộ các file được sử dụng trong ứng dụng. Bình thường cấu trúc bên trong của file APK như sau:
*.classes.dex: Bao gồm các mã code đã được biên dịch, dưới dạng Dex (Dalvik Executable) bytecode. Bạn có thể nhìn thấy nhiều file DEX trong 1 file APK, nếu bạn sử dụng multi dex vượt quá giới hạn 65536 hàm. Từ Android 5.0 trở lên, với việc giới thiệu ART runtime, chúng được biên dịch dưới dạng OTA file. Bạn có thể tìm hiểu cách giảm dung lượng của file dex ở “Phần 2: Rút gọn code”
*.res/: Folder này chứa toàn bộ các file XML (layout), và file ảnh (PNG, JPEG) trong các folder đặc trưng, như là -mdpi và -hdpi cho densities, -sw600dp hoặc -large cho kích cỡ màn hình, -en, -de, -pl cho ngôn ngữ. Chú ý rằng bất kỳ file XML nào trong res/ đều đã được biên dịch lại, do đó bạn không để đọc trực tiếp chúng bằng các text editor được.
“Phần 3: Xóa bỏ các resource không cần thiết” sẽ hướng dẫn bạn chắc chắn rằng mình không bị lãng phí dung lượng bởi việc sử dụng các resource thừa.
“Phần 4: Multi-APK, ABI và chia theo độ phân giải” và
“Phần 5: Multi-APK ở chế độ sản phẩm”, chúng ta sẽ trao đổi về cách chia ứng dụng thành nhiều file APK mà hỗ trợ cho từng nhóm thiết bị có phần cứng khác nhau.
“Phần 6: Tối ưu hóa dung lương ảnh, Zopfli & WebP" và
“Phần 7ối ưu hóa dung lượng ảnh, Shape Drawable và Vector Drawables” chúng ta sẽ bàn về các kỹ thuật tối ưu hóa để giảm dung lượng của các ảnh trong ứng dụng.
*.resources.arsc Một vài resource và file định danh (identifiers) được biên dịch và chứa lại trong file này. Bình thường nó sẽ không được nén lại và được chứa trong file APK, giúp cho việc truy xuất dữ liệu nhanh hơn. Việc nén lại file này bằng cách thủ công có thể là giải pháp đơn giản mất để giảm dụng lượng file, tuy nhiên đó không hẳn là ý kiến hay bởi 2 lý do sau:
Thứ nhất, Google Play store đã có sẵn cơ chế nén các data khi trao đổi dữ liệu.
Thứ hai, lưu trữ các file nén trong APK sẽ phải mất thời gian giải nén khi thực thi ứng dụng. Phần 3 sẽ trao đổi về kỹ thuật tối ưu hóa bằng cách chỉ bao gồm mỗi các file strings cho ngôn ngữ cần thiết trong folder này.
*.Android Manifest.xml Tương tự như các file XML khác, file Manifest của ứng dụng sẽ được biên dịch lại thành mã máy. Google Play Store sử dụng các thông tin trong file này để xác định file APK có thể cài đặt được trên thiết bị hay không?, dựa kiểm tra loại các phần cứng, màn hình, độ phân giải của các thiết bị này. Nếu bạn muốn kiểm tra các thông tin này sau khi quá trình biên dịch, bạn có thể dụng aapt tool của Android SDK1$aaptdumpbadgingyour_app.apk
*.libs/ Tất cả các thư viện native (*.so files) sẽ được đặt trong các folder con (cấu trúc CPU , e.g. x86, x86_64, armeabi-v7a) của folder libs/ . Bình thường nó sẽ được copy từ APK vào folder /data trong quá trình cài đặt. Tuy nhiên bản thân file APK không thể tự thay đổi khi file nằm trong thiết bị, do đó nó sẽ cần gấp đôi dung lượng cho bất kỳ thư viện native nào. ở
“Phần 8: các thư viện native” sẽ giới thiệu giải pháp cho vấn đề này ở Android 6.0+ cùng với lợi ích của việc tiết kiệm băng thông mạng internet cho các thiết bị cũ hơn.
*.assets/ Folder này chứa các file mà không được sử dụng như các file đặc trưng của Android. Các file phổ biến nhất là font chữ và data của game, hoặc bất kỳ loại data nào mà bạn muốn sử dụngtrực tiếp như là file stream.
*.META-INF/ Folder này được chứa trong các file APK đã được ký (signed APK), bao gồm danh sách tất cảcác file có trong APK và chữ ký của chúng. Cách xác thực chữ ký hiện tại trong Android là việc xác thực từng chữ ký với nội dung của từng file chưa được nén.Việc này phát sinh 1 hậu quả thú vị như sau. Bởi vì từng entry trong file ZIP được lưu trữ độc lập, điều đó có nghĩa rằng bạn có thể thay đổi mức độ nén của từng file mà không cần ký lại. Việc xác thực chữ ký sẽ thất bại, tuy nhiên nếu bạn xóa 1 vài file sau khi đã ký, thì ko có vấn đề gì. Thêm 1 điều cần lưu ý về việc ký lên file APK là zipalign tool được sử dụng cuối cùng trong quá trình build. Nếu bạn thay đổi nội dung của tập tin bằng tay, thì bạn sẽ phải ký lại, và sử dụng zipalign trước khi upload file lên Google Play Store.
Nguồn: sưu tầm
WTF Từ Cọp™: lần sau có copy bài ngta thì viết lại cho đàng hoàng, tái phạm nữa là ban nick nhé. Viết cái bài nó sơ sài vừa phải thôi
Đã chỉnh sửa bởi ankudo (13.11.2017 / 14:00) [3]