在android開(kāi)發(fā)調(diào)試過(guò)程中贬媒,使用adb install 會(huì)經(jīng)常報(bào)各種安裝錯(cuò)誤聋亡,install報(bào)錯(cuò)有多少種類型呢?我們可以通過(guò)查看android源碼來(lái)確認(rèn)報(bào)錯(cuò)種類际乘,查看android源碼杀捻,進(jìn)入frameworks/base/core/java/android/content/pm目錄,打開(kāi)PackageManager.java蚓庭。文件中聲明了各種報(bào)錯(cuò)的類型以及Error code致讥。
本文對(duì)adb install的報(bào)錯(cuò)類型全部列舉出來(lái)并提供解決方案,供大家參考解決器赞。
INSTALL_FAILED_ALREADY_EXISTS = -1;
解釋:apk已經(jīng)存在垢袱。
解決:adb install -r 強(qiáng)制安裝
INSTALL_FAILED_INVALID_APK = -2;
解釋: 無(wú)效的apk
解決: 排查方式與INSTALL_FAILED_INVALID_URI 類似
INSTALL_FAILED_INVALID_URI = -3;
解釋:無(wú)效的apk uri路徑
解決:可能的原因
- 文件路徑有問(wèn)題,比如輸入絕對(duì)路徑/文件路徑是否有空格港柜,符號(hào)半角全角問(wèn)題请契。
- 文件權(quán)限問(wèn)題,chmod更改文件權(quán)限夏醉。
INSTALL_FAILED_INSUFFICIENT_STORAGE = -4;
解釋:系統(tǒng)空間不足爽锥,無(wú)法安裝apk
解決:清理系統(tǒng)空間
INSTALL_FAILED_DUPLICATE_PACKAGE = -5;
解釋: 重復(fù)報(bào)名,表示系統(tǒng)中已存在相同的報(bào)名apk
解決: 卸載系統(tǒng)中重復(fù)包名畔柔,或者更改自己的apk包名
INSTALL_FAILED_NO_SHARED_USER = -6;
解釋:缺少shareduserdid
INSTALL_FAILED_UPDATE_INCOMPATIBLE = -7;
解釋:安裝的apk與系統(tǒng)中已存在的apk簽名不兼容
解決:重新給apk進(jìn)行簽名,或者卸載掉系統(tǒng)中的簽名沖突的apk氯夷。
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE = -8;
解釋:安裝apk的sharedUserId系統(tǒng)中已存在的apk不同,導(dǎo)致不能兼容覆蓋安裝
解決:
方法1:
查看Androidmanifest中android:sharedUserId信息,修改與之前apk的sharedUserId相同靶擦。
方法2:
卸載系統(tǒng)中的apk腮考,再安裝雇毫。
INSTALL_FAILED_MISSING_SHARED_LIBRARY = -9;
解釋:打包的apk缺少shared library庫(kù)
解決:在AndroidManifest中添加
<uses-library android:name="xxx" android:required="false"/> </application>
將如下的文件xml拷貝到/system/permission/下,注意文件權(quán)限
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<library name="xxx"
file="/system/framework/xxx.jar"/>
</permissions>
INSTALL_FAILED_REPLACE_COULDNT_DELETE = -10;
解釋:library庫(kù)替換時(shí)無(wú)法刪除
INSTALL_FAILED_DEXOPT = -11;
解釋:apk預(yù)編譯錯(cuò)誤踩蔚,缺少dex或者是空間不足導(dǎo)致
解決:多存在源碼編譯apk出現(xiàn)棚放,源碼編譯apk選擇了預(yù)編譯,優(yōu)化dex馅闽,導(dǎo)致apk里面沒(méi)有dex飘蚯。需要去除apk的預(yù)編譯。
INSTALL_FAILED_OLDER_SDK = -12;
解釋:系統(tǒng)的Android版本過(guò)低了福也,apk不支持
解決:修改app目錄下的“build.gradle”文件孝冒,將其中的minSdkVersion 、targetSdkVersion 修改后保持跟設(shè)備的android API版本一致拟杉。
INSTALL_FAILED_CONFLICTING_PROVIDER = -13;
解釋:檢查應(yīng)用的provider的唯authority屬性與系統(tǒng)中其他應(yīng)用provider authority屬性命令相同庄涡,產(chǎn)生沖突并且安裝失敗。
解決:修改provider的authority命名
INSTALL_FAILED_NEWER_SDK = -14;
解釋:系統(tǒng)的Android版本過(guò)高搬设,apk不支持
解決:apk需要適配高版本的Android設(shè)備
INSTALL_FAILED_TEST_ONLY = -15;
解釋:apk為測(cè)試版本
解決:安裝加 -t 參數(shù)穴店,adb install -t *.apk
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE = -16;
解釋:安裝的APK文件arm指令格式與模擬器/真機(jī)的CPU架構(gòu)上不兼容
解決:安裝到兼容的cpu模擬器/真機(jī),或者apk的so庫(kù)適配對(duì)應(yīng)的cpu arm架構(gòu)拿穴。
INSTALL_FAILED_MISSING_FEATURE = -17;
使用了一個(gè)無(wú)效的特性
INSTALL_FAILED_CONTAINER_ERROR = -18;
解釋:SD卡訪問(wèn)失敗泣洞,早期的 android設(shè)備版本會(huì)出現(xiàn)類似問(wèn)題。
INSTALL_FAILED_INVALID_INSTALL_LOCATION = -19;
解釋:無(wú)效的安裝路徑
INSTALL_FAILED_MEDIA_UNAVAILABLE = -20;
解釋:Android應(yīng)用安裝位置當(dāng)前不可用默色,早期android設(shè)備會(huì)出現(xiàn)類似問(wèn)題
INSTALL_FAILED_VERIFICATION_TIMEOUT = -21;
解釋:apk 安裝驗(yàn)證超時(shí)
INSTALL_FAILED_VERIFICATION_FAILURE = -22;
解釋:安裝驗(yàn)證失敗
解決:打開(kāi)android設(shè)備的未知來(lái)源應(yīng)用安裝開(kāi)關(guān)球凰。
INSTALL_FAILED_PACKAGE_CHANGED = -23;
解釋:應(yīng)用被改變了,檢測(cè)到應(yīng)用的codePath或者ResourcePath改變了
INSTALL_FAILED_UID_CHANGED = -24;
解釋:新安裝的包分配了一個(gè)不同的UID
解決:卸載app腿宰,并刪除系統(tǒng)中的殘留文件和文件夾呕诉,如/data/data,/data/app/, system/app/等目錄中包含app殘留文件吃度。
INSTALL_FAILED_VERSION_DOWNGRADE = -25;
解釋:安裝apk的VersionCode低于系統(tǒng)內(nèi)的
解決:更改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;
解釋:無(wú)法解析的 AndroidManifest.xml 文件
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102;
解釋:apk安裝異常錯(cuò)誤
INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103;
解釋:缺少簽名或者簽名方式有問(wèn)題
解決:打開(kāi)應(yīng)用,查看META-INF 目錄下查看是否有CERT.RSA文件椿每。修改build.gradle重新簽名伊者。
另外一種情況:Android N后apk增加了v2簽名,查看apk是否v1间护,V2簽名都有亦渗。android N以下設(shè)備如果安裝只有V2簽名的apk,則會(huì)報(bào)該錯(cuò)汁尺,需要將apk法精,V1,V2都簽名。
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES = -104;
解釋:簽名沖突
解決:卸載系統(tǒng)中的apk亿虽,再重新安裝菱涤。
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING = -105;
解釋:簽名編碼問(wèn)題
解決:查看簽名格式是否合法正確
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME = -106;
解釋:apk里使用了無(wú)效的包名
解決:檢查包名命令是否合法苞也,比如多余的空格,下劃線等洛勉。
INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID = -107;
解釋:無(wú)效的shareduserId,shareduserid值有問(wèn)題如迟。
解決:查看Androidmanifest中usersharedid的定義是否有問(wèn)題收毫。
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED = -108;
解釋:MALFORMED,畸形的殷勘。Manifest是無(wú)效的文件
解決:查看AndroidManifest是否有問(wèn)題此再。檢查manifest的元素和屬性的命令是否規(guī)范
INSTALL_PARSE_FAILED_MANIFEST_EMPTY = -109;
解釋:Manifest是空的
INSTALL_FAILED_INTERNAL_ERROR = -110;
解釋:系統(tǒng)問(wèn)題導(dǎo)致安裝失敗
解決:模擬器空間不足
INSTALL_FAILED_USER_RESTRICTED = -111;
解釋:用戶權(quán)限問(wèn)題,無(wú)法安裝
解決:android手機(jī)的調(diào)試權(quán)限問(wèn)題玲销,把usb調(diào)試權(quán)限打開(kāi)输拇。一般手機(jī)的usb調(diào)試權(quán)限在隱藏的開(kāi)發(fā)者模式菜單項(xiàng)目里面。
INSTALL_FAILED_DUPLICATE_PERMISSION = -112;
解釋:androidmanifest存在重復(fù)定義的permission
INSTALL_FAILED_NO_MATCHING_ABIS = -113;
解釋:應(yīng)用的so庫(kù)贤斜,沒(méi)有匹配的CPU指令集架構(gòu)
解決:build.gradle中添加不同的cpu abi體系策吠。