正在檢查瀏覽器支援…
INSTALL_FAILED_* 對照表
這頁認得的每一個失敗碼、它的意思,以及怎麼處理。這些碼是 Android 自己的常數,和桌面 `adb install` 印出來的一模一樣。
已經裝著的東西擋住了
- INSTALL_FAILED_ALREADY_EXISTS
- 這個套件已經安裝了,而這次安裝沒有指定要覆蓋。
- 先把已安裝的那份移除,再重裝一次。那個 App 的資料會一起不見。
- INSTALL_FAILED_UPDATE_INCOMPATIBLE
- 裝置上已經有同樣套件名的 App,但簽章金鑰不同,所以 Android 不把這次安裝當成更新。
- 把簽章憑證和已安裝的那個 App 比對一下。Android 不會讓不同金鑰簽出來的 App 覆蓋過去。
- 先把已安裝的那份移除,再重裝一次。那個 App 的資料會一起不見。
- INSTALL_FAILED_VERSION_DOWNGRADE
- APK 的 version code 比已安裝的那份低,而降版預設會被拒絕。
- 打開「允許降版」(`-d`)再試一次,或是先移除比較新的那版。新版寫下的資料,舊版不一定讀得動。
- 先把已安裝的那份移除,再重裝一次。那個 App 的資料會一起不見。
- INSTALL_FAILED_DUPLICATE_PACKAGE
- 裝置上已經有另一個套件在用這個套件名。
- 先把已安裝的那份移除,再重裝一次。那個 App 的資料會一起不見。
- INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
- APK 宣告的 `sharedUserId` 和已經掛在那個共用使用者底下的 App 衝突。
- 先把已安裝的那份移除,再重裝一次。那個 App 的資料會一起不見。
- 把簽章憑證和已安裝的那個 App 比對一下。Android 不會讓不同金鑰簽出來的 App 覆蓋過去。
- INSTALL_FAILED_UID_CHANGED
- 已安裝的 App 擁有一個 Linux UID,這次安裝會改動它,原本的資料就會變成孤兒。
- 先把已安裝的那份移除,再重裝一次。那個 App 的資料會一起不見。
- INSTALL_FAILED_REPLACE_COULDNT_DELETE
- Android 沒辦法把舊版移掉,好讓這一版接上去。
- 把手機重開機,再試一次。
- 先把已安裝的那份移除,再重裝一次。那個 App 的資料會一起不見。
- INSTALL_FAILED_DUPLICATE_PERMISSION
- APK 定義的權限名稱,已經有另一個安裝好的 App 定義過。
- 已經有另一個 App 佔住了同樣的 content authority 或權限名稱。找出它、移除掉,再試一次。
- INSTALL_FAILED_CONFLICTING_PROVIDER
- APK 宣告的 content provider authority,已經被另一個安裝好的 App 佔住。
- 已經有另一個 App 佔住了同樣的 content authority 或權限名稱。找出它、移除掉,再試一次。
- INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
- 已安裝的 App 用的是執行階段權限,而這個 APK 的目標 Android 舊到還在用安裝時授權模型——不允許往這個方向換。
- 先把已安裝的那份移除,再重裝一次。那個 App 的資料會一起不見。
APK 和這台裝置對不上
- INSTALL_FAILED_OLDER_SDK
- APK 需要比這支手機更新的 Android(`minSdkVersion` 高於裝置的 API level)。
- APK 宣告的 SDK 範圍和這個 Android 版本對不上。拿 `minSdkVersion` / `targetSdkVersion` 跟手機的版本核對一下。
- INSTALL_FAILED_NEWER_SDK
- APK 是為比這支手機更舊的 Android 建置的,它宣告的最高 SDK 把這台裝置排除在外。
- APK 宣告的 SDK 範圍和這個 Android 版本對不上。拿 `minSdkVersion` / `targetSdkVersion` 跟手機的版本核對一下。
- INSTALL_FAILED_NO_MATCHING_ABIS
- APK 裡有原生函式庫,但沒有一個是這支手機支援的 CPU 架構。
- 這個 APK 沒有這支手機 CPU 用的原生程式碼。換一份符合裝置 ABI 的建置,或改成安裝整組分割包而不是單一 APK。
- 要安裝容器裡的整組分割包,不能只挑其中一個 APK——分割包無法單獨安裝。
- INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
- APK 的原生程式碼跟手機的 CPU 架構對不上。
- 這個 APK 沒有這支手機 CPU 用的原生程式碼。換一份符合裝置 ABI 的建置,或改成安裝整組分割包而不是單一 APK。
- INSTALL_FAILED_MISSING_FEATURE
- APK 要求的硬體或軟體功能,這台裝置沒有宣告自己具備。
- APK 宣告的 SDK 範圍和這個 Android 版本對不上。拿 `minSdkVersion` / `targetSdkVersion` 跟手機的版本核對一下。
- INSTALL_FAILED_MISSING_SPLIT
- 這只是分割式 App 的其中一塊,它依賴的其他部分沒有裝——config 分割或功能模組不能自己站著。
- 要安裝容器裡的整組分割包,不能只挑其中一個 APK——分割包無法單獨安裝。
- INSTALL_FAILED_DEPRECATED_SDK_VERSION
- Android 14 以後會拒絕安裝目標 SDK 太舊的 App,不管簽章是什麼。
- APK 宣告的 SDK 範圍和這個 Android 版本對不上。拿 `minSdkVersion` / `targetSdkVersion` 跟手機的版本核對一下。
儲存空間
- INSTALL_FAILED_INSUFFICIENT_STORAGE
- 裝置的可用空間不夠放這個 App。
- 先在手機上清出空間再試一次——安裝除了 APK 本身,還要放編譯後的程式碼。
- INSTALL_FAILED_MEDIA_UNAVAILABLE
- 安裝的目標儲存空間沒有掛載,或是在安裝到一半時消失了。
- 再試一次——這種失敗通常是暫時性的。
- 把手機重開機,再試一次。
- INSTALL_FAILED_CONTAINER_ERROR
- Android 沒辦法備好用來放 App 檔案的容器——通常是底層的儲存問題。
- 先在手機上清出空間再試一次——安裝除了 APK 本身,還要放編譯後的程式碼。
- 再試一次——這種失敗通常是暫時性的。
驗證器、政策或建置旗標擋下來
- INSTALL_FAILED_TEST_ONLY
- 這個 APK 標了 `android:testOnly`,一般安裝會拒絕它。
- 打開「允許測試版」(`-t`)再試一次。這個 APK 是以除錯/測試用的形式建置的。
- INSTALL_FAILED_VERIFICATION_FAILURE
- 套件驗證機制(多數手機上就是 Play Protect)檢查過這個 APK 並拒絕了它。
- Play Protect 掃過這個 APK 並拒絕了它。關掉「使用 Play Protect 掃描應用程式」或開發人員選項裡的「透過 USB 驗證應用程式」,再試一次。
- 再試一次——這種失敗通常是暫時性的。
- INSTALL_FAILED_VERIFICATION_TIMEOUT
- 套件驗證機制沒有在時限內回應,所以安裝被取消。
- 再試一次——這種失敗通常是暫時性的。
- Play Protect 掃過這個 APK 並拒絕了它。關掉「使用 Play Protect 掃描應用程式」或開發人員選項裡的「透過 USB 驗證應用程式」,再試一次。
- INSTALL_FAILED_USER_RESTRICTED
- 裝置政策或使用者限制禁止用這種方式安裝 App。
- 解開螢幕鎖,並回應手機上跳出來的對話框——有些安裝需要在裝置端確認,沒人理它就會安靜地逾時。
- 工作設定檔、裝置擁有者或家長監護政策擋住了安裝。去設定 → 使用者看看,或問管這台裝置的人。
- INSTALL_FAILED_ABORTED
- 安裝工作階段在 commit 之前被取消了——常見原因是裝置上的對話框沒人回應、螢幕鎖著,或是另一個安裝把這個工作階段搶走。
- 解開螢幕鎖,並回應手機上跳出來的對話框——有些安裝需要在裝置端確認,沒人理它就會安靜地逾時。
- 再試一次——這種失敗通常是暫時性的。
檔案讀不成 APK
- INSTALL_FAILED_INVALID_APK
- Android 不接受這個 APK 為有效套件——可能是壓縮檔壞了、分割包不完整,或同一個分割被寫進工作階段兩次。
- 要安裝容器裡的整組分割包,不能只挑其中一個 APK——分割包無法單獨安裝。
- 這個檔案不是有效的 APK,或是傳過來就已經壞了。回原始來源重新下載。
- INSTALL_FAILED_BAD_SIGNATURE
- APK 的簽章驗不過:檔案在簽章之後被改過,或是簽章區塊本身壞了。
- 把簽章憑證和已安裝的那個 App 比對一下。Android 不會讓不同金鑰簽出來的 App 覆蓋過去。
- 這個檔案不是有效的 APK,或是傳過來就已經壞了。回原始來源重新下載。
- INSTALL_PARSE_FAILED_NOT_APK
- 這根本不是 APK——安裝程式沒辦法把它當成 APK 讀。
- 這個檔案不是有效的 APK,或是傳過來就已經壞了。回原始來源重新下載。
- INSTALL_PARSE_FAILED_NO_CERTIFICATES
- APK 沒有有效簽章。沒簽過的 APK,以及重新打包時把簽章檔弄掉的 APK,都會落在這裡。
- 這個檔案不是有效的 APK,或是傳過來就已經壞了。回原始來源重新下載。
- 把簽章憑證和已安裝的那個 App 比對一下。Android 不會讓不同金鑰簽出來的 App 覆蓋過去。
- INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
- 這組 APK 不是全部用同一把金鑰簽的——同一個 App 的每個分割都必須和 base 同簽章。
- 把簽章憑證和已安裝的那個 App 比對一下。Android 不會讓不同金鑰簽出來的 App 覆蓋過去。
- 這個檔案不是有效的 APK,或是傳過來就已經壞了。回原始來源重新下載。
- INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
- APK 的 `AndroidManifest.xml` 解析不了。
- 這個檔案不是有效的 APK,或是傳過來就已經壞了。回原始來源重新下載。
安裝工作階段或框架本身失敗
- INSTALL_FAILED_INTERNAL_ERROR
- 套件安裝程式踩到內部錯誤,而且沒有多說什麼。
- 再試一次——這種失敗通常是暫時性的。
- 把手機重開機,再試一次。
- INSTALL_FAILED_DEXOPT
- 檔案複製完之後編譯 App 程式碼失敗——通常是可用空間不夠,偶爾是 DEX 壞了。
- 先在手機上清出空間再試一次——安裝除了 APK 本身,還要放編譯後的程式碼。
- 把手機重開機,再試一次。
- 再試一次——這種失敗通常是暫時性的。