Tệp chương trình của Android có định dạng APK, tệp APK là chương trình chạy cuối cùng của Android, là tên đầy đủ của Android Package, tương tự như tệp sis trong hệ điều hành Symbian, tệp JAR trên nền tảng J2ME. Thực ra tệp APK là định dạng tệp ZIP, nhưng phần mở rộng đã được đổi thành APK, sau khi giải nén bằng RAR, bạn có thể thấy tệp Dex. Dex là tên đầy đủ của Dalvik VM executes, tức là chương trình thực thi Dalvik của Android, không phải mã bytecode của Java mà là mã bytecode Dalvik.
Cấu trúc một tệp APK gồm:
- res/ Thư mục chứa các tệp tài nguyên
- META-INF/ Trong tệp Jar thường có thể thấy resources.arsc là tệp tài nguyên nhị phân đã biên dịch, chủ yếu là các chuỗi sử dụng trong chương trình!
- AndroidManifest.xml Tệp cấu hình toàn cục của chương trình
- classes.dex Tệp mã bytecode Dalvik, các tệp JAVA mà chúng ta viết được biên dịch thành mã bytecode định dạng DEX
Tóm tắt, chúng ta thấy khi Android chạy một chương trình trước tiên cần giải nén UnZip, sau đó giống như Symbian, khác với tệp PE trong Windows Mobile. Cách làm này không cao về bảo mật và độ tin cậy của chương trình, nhưng thông qua lệnh dexdump vẫn có thể giải ngược, nhưng cách làm này phù hợp với quy luật phát triển, Windows Gadgets của Microsoft hoặc WPF cũng áp dụng cách cấu trúc này.
1. Tệp Java –––––– Tệp nguồn ứng dụng
Tôi nghĩ đây là tệp mà mọi người nghe thấy khi nhắc đến Android, bản thân Android một phần lớn được viết bằng Java (cơ bản trong sơ đồ kiến trúc màu xanh là phát triển bằng Java), ứng dụng Android phải sử dụng Java để phát triển.
2. Tệp Class –––––– Tệp mục tiêu sau khi Java biên dịch
Không giống như J2SE thông thường, Java biên dịch thành class có thể chạy trực tiếp, trên nền tảng Android, tệp class không thể chạy trực tiếp. Vì Google sử dụng Dalvik riêng để chạy ứng dụng, nên tệp class này chắc chắn cũng không thể chạy trên môi trường Java của Sun, theo cảm nhận cá nhân, tệp class của Android thực chất chỉ là mục tiêu trung gian trong quá trình biên dịch, cần liên kết thành tệp dex mới có thể chạy trên Dalvik.3. Tệp Dex ---- Tệp thực thi trên nền tảng Android Định dạng tệp bytecode được máy ảo Dalvik của Android hỗ trợ Google đã sử dụng máy ảo Dalvik riêng của mình để định nghĩa trên nền tảng Android mới ra mắt, máy ảo này không thực thi bytecode Java mà là một loại bytecode khác: bytecode định dạng dex. Sau khi biên dịch mã Java, thông qua các công cụ trên nền tảng Android, bytecode Java có thể được chuyển đổi thành bytecode Dex. Mặc dù Google nói rằng Dalvik được tùy chỉnh cho thiết bị di động, nhưng nhiều người trong ngành cho rằng điều này nhằm tránh việc xin giấy phép Java từ Sun. Do không có nhiều chi tiết được công bố, hiện vẫn chưa tìm thấy triển khai cụ thể của Dalvik, chỉ có thể làm một số phân tích đơn giản dựa trên SDK. Máy ảo Dalvik này đã được tối ưu hóa cho các ứng dụng/CPU điện thoại, có thể chạy nhiều máy ảo cùng lúc mà không chiếm quá nhiều tài nguyên, mã nguồn Dalvik hiện chưa được công khai để tải xuống (toàn bộ hệ thống sẽ mở trong tương lai), hiện tại Google hy vọng mọi người có thể bắt đầu phát triển ứng dụng bằng bộ SDK này, những thứ ở tầng dưới sẽ dần được công bố. 4. Tệp Apk ---- Tệp cài đặt trên Android Apk là phần mở rộng của gói cài đặt Android, một gói cài đặt Android bao gồm tất cả các tệp liên quan đến một ứng dụng Android cụ thể. Tệp apk đóng gói tệp AndroidManifest.xml, mã ứng dụng (.dex), các tệp tài nguyên và các tệp khác thành một gói nén. Một dự án chỉ có thể đóng gói thành một tệp .apk. Còn cách bẻ khóa thì tùy thuộc vào cá nhân.