iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0

APK 全名為 Android Package Kit,是 Android 作業系統用於安裝應用程式的檔案格式。
APK 包含編譯後的程式碼,所有編譯後的程式碼均儲存在 .dex 檔案中,包含應用程式的核心邏輯。
基本流程如下:Java 或 Kotlin 程式碼會被編譯成 Bytecode,隨後由 Dalvik 虛擬機或 ART(Android Runtime)直接執行。
除了編譯後的程式碼,APK 還包含資源(Resources,例如圖片、UI 介面等)以及 AndroidManifest.xml 檔案。
把 APK 解壓縮後:
https://ithelp.ithome.com.tw/upload/images/20250916/20149459vQq9P1TaPw.png

可視化結構圖:
https://ithelp.ithome.com.tw/upload/images/20250916/20149459e365L8Kk1C.png
下面會介紹一下遮些資料夾與檔案內容

裡面檔案都是被編碼過 不太能直接讀
https://ithelp.ithome.com.tw/upload/images/20250916/20149459kNLNrcjPp8.png

MATA-INFO

META-INF 資料夾在應用程式簽名時生成,包含驗證相關資訊。若應用程式被修改,驗證將失效,APK 可能要重新簽署。
https://ithelp.ithome.com.tw/upload/images/20250916/20149459rmWKZdWcPj.png
主要檔案:
CERT.RSA:包含公開金鑰(Public Key)以及 CERT.SF 的簽名。
CERT.SF:包含各檔案的 Hash 值。
MANIFEST.MF:記錄 APK 中所有檔案的名稱及其雜湊清單(使用 SHA-256 並以 Base64 編碼),用於檢查檔案是否被修改。

https://ithelp.ithome.com.tw/upload/images/20250916/20149459GFGJfYAuWP.png

Assets

Assets 資料夾用於存放開發者打包的資源(Bundle)。Bundle 可視為將多個檔案整合成單一檔案,這些資源可透過 AssetManager 讀取。
有趣的是,像 React Native 這樣的框架會在此資料夾存放程式碼和動態連結庫(DLL)。

Lib

Lib 資料夾主要存放 Native Library,開發者可透過 NDK(Native Development Kit)使用 C/C++ 撰寫功能。這些檔案通常以 .so 副檔名結尾。
https://ithelp.ithome.com.tw/upload/images/20250916/20149459snDmbuC5d7.jpg

Res

Res 資料夾存放預先定義的資源,這些資源無法在程式運行時由使用者修改。相較之下,Assets 中的資源可由使用者即時更改。
Res 包含的資源包括作業系統版本設定、網路設定等。

Android wManifest.xml

AndroidManifest.xml 包含應用程式的元資料(Metadata),提供應用程式的基本資訊,並定義必要的元件與屬性,方便系統管理應用程式。

  • Package Name
  • SDK Version
  • Build Version
  • Permissions
  • NetworkSecurityConfig
  • Activities
  • Providers
  • Services

Classes.dex

Classes.dex 包含編譯後的 Java 或 Kotlin 類別檔案,這些檔案可直接由 ART 執行。若應用程式較大,類別數量較多,會自動拆分為多個檔案,例如 classes2.dex、classes3.dex 等。

Resource.arsc

Resources.arsc 包含預先編譯的資源檔案,應用程式運行時會使用這些資源。該檔案將程式碼中的資源識別碼對應到實際值。


上一篇
DAY 6 Android Security Features 下
下一篇
Day 8 Android App & Native Apps
系列文
我是不可能一直學Android 絕對不會8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言