關於Android安裝apk出現解析包異常問題情況總結


原文地址:關於Android安裝apk出現解析包異常問題情況總結 | Stars-One的雜貨小窩

說之前,可以推薦下各位使用這個開源庫AndroidUtilCode,下面提及到的工具類,都是在此庫中

以下說的解析包異常,是指進到安裝頁面就立馬出現了錯誤提示

而不是在可以正常進入安裝界面,然后點擊了安裝按鈕之后后,最后彈出個安裝失敗的提示

這兩個情況是有所區別的,需要注意!!

而下面總結的6種情況,第6種情況就是進入到安裝界面了,然后點擊安裝按鈕,出現了127的錯誤碼提示

當然,遇到的情況不多,可能總結不全,若是有所遺漏,各位有所見解或補充可以在評論區回復下

情況總結

  1. apk下載過程中損壞
  2. 安裝的代碼有問題(沒有申請對應權限)
  3. 高版本下載apk不成功(apk文件讀取不到導致報錯)
  4. 存儲權限未申請,Android8以上,沒有申請允許應用安裝未知應用的權限
  5. apk要使用v1+v2簽名,v2是適用於Android7.0以上版本的安裝
  6. Android12版本安裝才出現的問題,原因是清單文件中需要聲明exported屬性
  7. 安裝出現-112錯誤碼

1.apk下載過程中損壞

這個情況,沒有太多展開可以說的,比較少見,及網絡下載過程中,apk文件損壞了,導致解析包出現異常

2.安裝apk代碼有問題

這里統一推薦使用AppUtils.installApp();方法去安裝apk,里面進行了Android8.0的版本兼容處理,包含安裝第三方應用的權限申請

動態申請前,別忘了需要在清單文件中聲明此權限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

3.高版本下載apk不成功

這個問題是我目前排查apk出現過的問題,由於之前的項目中,是固定下載在Download文件夾中,但是,在Android10之后,存儲權限發生變更,導致無法直接將文件下載到Download文件夾,從而導致文件下載失敗,進而導致出現解析包異常

解決方法只要適配下Android10之后的路徑問題即可

這里推薦下載在app自己的files文件夾中即可解決問題,使用此路徑PathUtils.getExternalAppDownloadPath()即可

4.權限未申請

這里需要說下有兩種權限,一個是存儲權限,另外一個則是安裝第三方應用的權限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

存儲權限的話,Android6.0需要手動申請,這里不再過多贅述

5.apk簽名問題

這里也是比較常見的問題了,原因是我項目使用了360加固,然后,進行了重簽名導致

之前一直都是使用命令行進行重簽名,沒太注意到,其實v2的參數需要聲明,加固后的安裝包一直沒有v2簽名

而Android7.0版本都是需要驗證v2版本簽名,自然是出現了問題

之后進行了嘗試,並且稍微封裝了一個用來簽名的工具,就不用每次都要輸入命令了

感興趣的可看此鏈接ASCTool: apk簽名驗證破解工具 Apk Signature Crack Tool

6.Android12版本安裝出現問題

targetSdkVersion為31【以Android 12為目標】的應用務必要加入v2簽名,務必要對使用的activity,service,broadcast receiver含有intent-filter,顯示聲明android:exported屬性。

AndroidManifest文件中,有intent-filter的屬性的四大組件,需要聲明exported屬性為true

即下面截圖這種情況

如果適配安卓12的系統,調用的sdk是31的話。可能需要進行適配。

出現安裝失敗22的,有可能是因為activity或者receiver,service里面沒有加上android:exported="false"這個字段。

注意在launcheractivity里面一定要設置android:exported為true。這個是外部引用的意思。

如果在launcheractivity里面沒有設置為true。那么APP圖標點擊就會出現未安裝該應用程序。

如果出現安裝失敗-127的話。是因為你的manifest里面聲明的權限重復了。

7.安裝出現-112錯誤碼

公司的一個項目,之前因為需求的關系接入了騰訊雲IM(由於圖快,就把騰訊雲IM的demo沒改就接入了)

然后客戶反饋說在紅米Note 10上安裝出現錯誤碼-112

查了下資料,這個錯誤嗎是說明用到了相同的權限

由於是接入了騰訊雲IM之后才會出現這個問題,所以就准備從騰訊雲IM的相關AndroidMainfest.xml文件入手排查

於是嘗試改了下權限的聲明,測試發現已經ok了

補充-apk安裝錯誤碼及說明

error code 解釋
INSTALL_SUCCEEDED = 1 success
INSTALL_REASON_USER = 4 包安裝由用戶發起
INSTALL_REASON_DEVICE_SETUP = 3 包安裝了,作為設備設置的一部分
INSTALL_REASON_DEVICE_RESTORE = 2 表明這個包安裝的從另一個設備恢復
INSTALL_REASON_POLICY = 1 代碼表明這個包安裝由於企業政策
INSTALL_REASON_UNKNOWN = 0 代碼表明安裝這個包的原因是未知的
INSTALL_FAILED_ALREADY_EXISTS = -1 程序已經存在
INSTALL_FAILED_INVALID_APK = -2 無效的APK
INSTALL_FAILED_INVALID_URI = -3 無效的鏈接
INSTALL_FAILED_INSUFFICIENT_STORAGE = -4 沒有足夠的存儲空間
INSTALL_FAILED_DUPLICATE_PACKAGE = -5 已存在同名程序
INSTALL_FAILED_NO_SHARED_USER = -6 共享用戶不存在
INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7 更新不兼容(舊包沒有刪除)
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8 共享用戶不兼容 如果新包請求一個共享的用戶已安裝在設備上,沒有匹配的簽名
INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9 共享庫已丟失
INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10 替換時無法刪除,如新的包使用一個共享庫是不可用的
INSTALL_FAILED_DEXOPT = -11 空間不足或驗證失敗
INSTALL_FAILED_OLDER_SDK = -12 系統版本過舊
INSTALL_FAILED_CONFLICTING_PROVIDER = -13 存在同名的內容提供者
INSTALL_FAILED_NEWER_SDK = -14 系統版本過新
INSTALL_FAILED_TEST_ONLY = -15 不被允許測試的測試程序
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16 包含的本機代碼不兼容CPU_ABI
INSTALL_FAILED_MISSING_FEATURE = -17 使用了一個無效的特性
INSTALL_FAILED_CONTAINER_ERROR = -18 SD卡訪問失敗
INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19 無效的安裝路徑
INSTALL_FAILED_MEDIA_UNAVAILABLE = -20 SD卡不可用
INSTALL_FAILED_VERIFICATION_TIMEOUT = -21 驗證超時
INSTALL_FAILED_VERIFICATION_FAILURE = -22 驗證失敗
INSTALL_FAILED_PACKAGE_CHANGED = -23 預期的應用被改變
INSTALL_FAILED_UID_CHANGED = -24 新的包分配一個與過去不同的UID
INSTALL_FAILED_VERSION_DOWNGRADE = -25 安裝舊版本
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26 如果舊包目標SDK支持運行時允許和足夠高的新方案目標SDK足夠低到不支持運行時權限
INSTALL_FAILED_SANDBOX_VERSION_DOWNGRADE = -27 新包試圖下調目標沙箱版本的應用程序
NSTALL_PARSE_FAILED_NOT_APK = -100 解析失敗,不是APK
INSTALL_PARSE_FAILED_BAD_MANIFEST = -101 解析失敗,無法提取
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102 解析失敗,無法預期的異常
INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103 解析失敗,找不到證書
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104 解析失敗,證書不一致
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105 解析失敗,證書編碼異常
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106 解析失敗,manifest中的包名錯誤或丟失
INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107 解析失敗,manifest中的共享用戶錯誤
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108 解析失敗,manifest中出現結構性錯誤
INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109 解析失敗,manifest中沒有actionable tags (instrumentation or application)
INSTALL_FAILED_INTERNAL_ERROR = -110 系統問題導致安裝失敗
INSTALL_FAILED_USER_RESTRICTED = -111 因為用戶限制安裝應用程序,系統沒有安裝
INSTALL_FAILED_DUPLICATE_PERMISSION = -112 權限重復定義使用
INSTALL_FAILED_NO_MATCHING_ABIS = -113 native code不匹配任何支持的abi系統

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM