在android開發調試過程中,使用adb install 會經常報各種安裝錯誤,install報錯有多少種類型呢?我們可以通過查看android源碼來確認報錯種類,查看android源碼,進入frameworks/base/core/java/android/content/pm目錄,打開PackageManager.java。文件中聲明了各種報錯的類型以及Error code。
本文對adb install的報錯類型全部列舉出來并提供解決方案,供大家參考解決。
INSTALL_FAILED_ALREADY_EXISTS = -1;
解釋:apk已經存在。
解決:adb install -r 強制安裝
INSTALL_FAILED_INVALID_APK = -2;
解釋: 無效的apk
解決: 排查方式與INSTALL_FAILED_INVALID_URI 類似
INSTALL_FAILED_INVALID_URI = -3;
解釋:無效的apk uri路徑
解決:可能的原因
- 文件路徑有問題,比如輸入絕對路徑/文件路徑是否有空格,符號半角全角問題。
- 文件權限問題,chmod更改文件權限。
INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;
解釋:系統空間不足,無法安裝apk
解決:清理系統空間
INSTALL_FAILED_DUPLICATE_PACKAGE = -5;
解釋: 重復報名,表示系統中已存在相同的報名apk
解決: 卸載系統中重復包名,或者更改自己的apk包名
INSTALL_FAILED_NO_SHARED_USER = -6;
解釋:缺少shareduserdid
INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;
解釋:安裝的apk與系統中已存在的apk簽名不兼容
解決:重新給apk進行簽名,或者卸載掉系統中的簽名沖突的apk。
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;
解釋:安裝apk的sharedUserId系統中已存在的apk不同,導致不能兼容覆蓋安裝
解決:
方法1:
查看Androidmanifest中android:sharedUserId信息,修改與之前apk的sharedUserId相同。
方法2:
卸載系統中的apk,再安裝。
INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;
解釋:打包的apk缺少shared library庫
解決:在AndroidManifest中添加
<uses-library android:name="xxx" android:required="false"/> </application>
將如下的文件xml拷貝到/system/permission/下,注意文件權限
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<library name="xxx"
file="/system/framework/xxx.jar"/>
</permissions>
INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;
解釋:library庫替換時無法刪除
INSTALL_FAILED_DEXOPT = -11;
解釋:apk預編譯錯誤,缺少dex或者是空間不足導致
解決:多存在源碼編譯apk出現,源碼編譯apk選擇了預編譯,優化dex,導致apk里面沒有dex。需要去除apk的預編譯。
INSTALL_FAILED_OLDER_SDK = -12;
解釋:系統的Android版本過低了,apk不支持
解決:修改app目錄下的“build.gradle”文件,將其中的minSdkVersion 、targetSdkVersion 修改后保持跟設備的android API版本一致。
INSTALL_FAILED_CONFLICTING_PROVIDER = -13;
解釋:檢查應用的provider的唯authority屬性與系統中其他應用provider authority屬性命令相同,產生沖突并且安裝失敗。
解決:修改provider的authority命名
INSTALL_FAILED_NEWER_SDK = -14;
解釋:系統的Android版本過高,apk不支持
解決:apk需要適配高版本的Android設備
INSTALL_FAILED_TEST_ONLY = -15;
解釋:apk為測試版本
解決:安裝加 -t 參數,adb install -t *.apk
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
解釋:安裝的APK文件arm指令格式與模擬器/真機的CPU架構上不兼容
解決:安裝到兼容的cpu模擬器/真機,或者apk的so庫適配對應的cpu arm架構。
INSTALL_FAILED_MISSING_FEATURE = -17;
使用了一個無效的特性
INSTALL_FAILED_CONTAINER_ERROR = -18;
解釋:SD卡訪問失敗,早期的 android設備版本會出現類似問題。
INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;
解釋:無效的安裝路徑
INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
解釋:Android應用安裝位置當前不可用,早期android設備會出現類似問題
INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;
解釋:apk 安裝驗證超時
INSTALL_FAILED_VERIFICATION_FAILURE = -22;
解釋:安裝驗證失敗
解決:打開android設備的未知來源應用安裝開關。
INSTALL_FAILED_PACKAGE_CHANGED = -23;
解釋:應用被改變了,檢測到應用的codePath或者ResourcePath改變了
INSTALL_FAILED_UID_CHANGED = -24;
解釋:新安裝的包分配了一個不同的UID
解決:卸載app,并刪除系統中的殘留文件和文件夾,如/data/data,/data/app/, system/app/等目錄中包含app殘留文件。
INSTALL_FAILED_VERSION_DOWNGRADE = -25;
解釋:安裝apk的VersionCode低于系統內的
解決:更改VersionCode
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE = -26;
解釋:新安裝的apk target SDK 較之前的apk低。
解決:修改targetSdkVersion
INSTALL_PARSE_FAILED_NOT_APK = -100;
解釋:非apk文件
INSTALL_PARSE_FAILED_BAD_MANIFEST = -101;
解釋:無法解析的 AndroidManifest.xml 文件
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;
解釋:apk安裝異常錯誤
INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
解釋:缺少簽名或者簽名方式有問題
解決:打開應用,查看META-INF 目錄下查看是否有CERT.RSA文件。修改build.gradle重新簽名。
另外一種情況:Android N后apk增加了v2簽名,查看apk是否v1,V2簽名都有。android N以下設備如果安裝只有V2簽名的apk,則會報該錯,需要將apk,V1,V2都簽名。
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;
解釋:簽名沖突
解決:卸載系統中的apk,再重新安裝。
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;
解釋:簽名編碼問題
解決:查看簽名格式是否合法正確
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;
解釋:apk里使用了無效的包名
解決:檢查包名命令是否合法,比如多余的空格,下劃線等。
INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;
解釋:無效的shareduserId,shareduserid值有問題。
解決:查看Androidmanifest中usersharedid的定義是否有問題。
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;
解釋:MALFORMED,畸形的。Manifest是無效的文件
解決:查看AndroidManifest是否有問題。檢查manifest的元素和屬性的命令是否規范
INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;
解釋:Manifest是空的
INSTALL_FAILED_INTERNAL_ERROR = -110;
解釋:系統問題導致安裝失敗
解決:模擬器空間不足
INSTALL_FAILED_USER_RESTRICTED = -111;
解釋:用戶權限問題,無法安裝
解決:android手機的調試權限問題,把usb調試權限打開。一般手機的usb調試權限在隱藏的開發者模式菜單項目里面。
INSTALL_FAILED_DUPLICATE_PERMISSION = -112;
解釋:androidmanifest存在重復定義的permission
INSTALL_FAILED_NO_MATCHING_ABIS = -113;
解釋:應用的so庫,沒有匹配的CPU指令集架構
解決:build.gradle中添加不同的cpu abi體系。