使用一般解壓縮軟體(如 WinRAR、7-Zip、Windows 內建解壓縮)解開 APK 檔後,發現 res/drawable-* 目錄下的 PNG 檔案無法用圖片檢視器開啟,或顯示「檔案損毀」、「格式不支援」。
Android 建置流程中,AAPT (Android Asset Packaging Tool) 會對 PNG 檔案進行無損最佳化:
IDAT 區塊拆分為多個較小的 IDAT 區塊,或調整濾波器類型這些最佳化後的 PNG 仍符合 PNG 規範,但部分舊版或嚴格遵循單一 IDAT 區塊預期的檢視器/編輯器無法正確解析。
# 安裝 apktool
# Windows: 下載 apktool.bat + apktool.jar
# macOS/Linux: brew install apktool / apt install apktool
# 反編譯並自動還原原始資源
apktool d your_app.apk -o output_folder
apktool 會在反編譯過程中自動將 AAPT 最佳化過的 PNG 還原為標準 PNG 格式,輸出的圖片可直接用任何檢視器開啟。
Build → Analyze APK...res/drawable-*Save As... 儲存,輸出即為標準 PNG部分國產解壓軟體內建對 AAPT 最佳化 PNG 的相容處理,解壓後可直接預覽。但此行為非標準保證,建議仍以方案一、二為主。
若專案中有不可被修改的 PNG(如預載入的圖片驗證碼、需像素級對比的測試圖),可在 build.gradle 關閉 AAPT 壓縮:
android {
aaptOptions {
cruncherEnabled = false // 關閉 PNG 最佳化
}
}
或將該圖片放入 assets/ 目錄(不經 AAPT 處理),執行時用 AssetManager.open() 讀取。
APK 內 PNG 無法開啟是因 AAPT 編譯時最佳化導致格式細節變化,非檔案損毀。使用 apktool d 或 Android Studio APK Analyzer 可取得標準 PNG;開發端可透過 cruncherEnabled = false 或放入 assets/ 保留原始格式。