Sau khi một số android
ứng dụng được cài đặt, tôi thấy rằng nó sẽ thay đổi thành odex
tệp (không phải apk
) trong điện thoại thông minh. Điều đó xảy ra như thế nào? Ai có thể dạy tôi, tôi rất quan tâm đến nó.Các tệp ODEX trong Android là gì?
Trả lời
This Blog article giải thích bên trong của file Odex:
AN FILE Odex LÀ GÌ?
Trong hệ thống tệp Android, các ứng dụng đi kèm gói với phần mở rộng .apk. Các gói ứng dụng hoặc APK này chứa các tệp .odex có chức năng được cho là nhằm tiết kiệm dung lượng. Các tệp ‘odex’ này thực sự là bộ sưu tập các phần của ứng dụng được tối ưu hóa trước khi khởi động. Làm như vậy tăng tốc quá trình khởi động, vì nó tải trước một phần của một ứng dụng. Mặt khác, nó cũng làm cho việc tải các ứng dụng này trở nên khó khăn vì một phần mã hóa đã bị trích xuất đến một vị trí khác trước khi thực hiện.
The blog article chủ yếu là đúng, nhưng chưa hoàn thành. Để hiểu đầy đủ về tệp odex, bạn phải hiểu một chút về cách các tệp ứng dụng (APK) hoạt động.
Các ứng dụng về cơ bản là các lưu trữ ZIP được tôn vinh. Mã java được lưu trữ trong một tệp gọi là classes.dex và tệp này được phân tích cú pháp bởi Dalvik JVM và bộ nhớ cache của tệp classes.dex được xử lý được lưu trữ trong bộ nhớ cache Dalvik của điện thoại.
Một odex về cơ bản là phiên bản được xử lý trước của các lớp application.dex của ứng dụng được thực thi sẵn sàng cho Dalvik. Khi một ứng dụng là odexed, các classes.dex được lấy ra từ kho lưu trữ APK và nó không viết bất cứ điều gì để bộ nhớ cache Dalvik. Một ứng dụng không phải là odexed kết thúc với 2 bản sao của các tập tin classes.dex - một đóng gói trong APK, và một xử lý trong bộ nhớ cache Dalvik. Nó cũng mất nhiều thời gian hơn để khởi chạy lần đầu tiên kể từ khi Dalvik phải trích xuất và xử lý tệp classes.dex.
Nếu bạn đang xây dựng một ROM tùy chỉnh, bạn nên đánh giá cả tệp JAR khung và ứng dụng kho để tối đa hóa dung lượng lưu trữ nội bộ cho ứng dụng do người dùng cài đặt. Nếu bạn muốn chủ đề, sau đó chỉ cần deodex -> áp dụng chủ đề của bạn -> reodex -> phát hành.
Để thực sự deodex, sử dụng nhỏ và baksmali:
Bạn có thể vui lòng chia sẻ cách chúng tôi có thể reodex một tập tin apk? – Basher51
ART
Trong ART, .odex
file chứa:
chứa AOT mã biên dịch cho các phương pháp trong APK.
theo các tài liệu: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure
Bên cạnh đó, họ dường như các thư viện chia sẻ thường xuyên, vì nếu bạn nhận được bất kỳ ứng dụng, và kiểm tra:
file /data/app/com.android.appname-*/oat/arm64/base.odex
nó nói:
base.odex: ELF shared object, 64-bit LSB arm64, stripped
và aarch64-linux-gnu-objdump -d base.odex
dường như hoạt động và đưa ra một số cách tháo gỡ có ý nghĩa (nhưng cũng có một số phân đoạn rác ns).
- 1. Các tệp .dex trong Android là gì?
- 2. các định dạng tệp có thể hỗ trợ trình phát video android trong Android là gì?
- 3. Adb trong Android là gì?
- 4. dx.jar trong SDK Android là gì?
- 5. AwesomePlayer trong Android là gì?
- 6. Uri.parse là gì trong android
- 7. "Các tệp khác" trong Giải pháp DTE VS2010 là gì?
- 8. Loại "VALUE" trong các tệp nguồn Ruby là gì?
- 9. Trong các tệp WiX, Tên = "SourceDir" là gì?
- 10. Tệp .S là gì?
- 11. Tệp PDB là gì?
- 12. Tệp .episode là gì ..?
- 13. Tệp .axf là gì?
- 14. Tệp crossdomain.xml là gì?
- 15. Gọi lại trong Android là gì?
- 16. Tiện ích trong Android là gì?
- 17. "BasicDream" trong android ICS là gì?
- 18. Tệp .h.gch là gì?
- 19. Tệp .sln.ide là gì?
- 20. Tệp swz trong Flash là gì?
- 21. Ý nghĩa của tệp dylib là gì?
- 22. Tệp ".dll.a" là gì?
- 23. Tệp PDB là gì?
- 24. Tệp .sconsign.dblite là gì?
- 25. Tệp * .vshost.exe.config là gì?
- 26. Tệp MDF là gì?
- 27. Tệp .htaccess là gì?
- 28. Cửa sổ Android là gì?
- 29. Tệp * .snap trong nhật thực là gì?
- 30. Tệp gpstate là gì trong ASP.NET
Nếu tôi hy vọng ứng dụng của tôi có cùng chức năng (ứng dụng chạy trong odex không phải APK), cách thực hiện? – user1253435
Bạn sẽ nhận được một dấu trừ! Các dalvik không tối ưu hóa thời gian khởi động. Mã nó được tối ưu hóa giống như trong trình biên dịch từ ngôn ngữ cấp cao đến cấp thấp hơn, chỉ trong trường hợp này mã cho dalvik gần như là bản dịch sang mã máy. Đó là lý do tại sao bạn có thể tạo ra một ứng dụng từ C++, không chỉ từ java. – cox