寫在前面
最近又在使用Windows系統了。操作系統變了,環境也變了,問題也隨之而來哦~
用AS Run了一個代碼,生成了apk進行安裝。但是不幸的事情是,我的小米手機提示,未安裝(也就是安裝失敗了)。
查看logcat 提示:Installation error code: -15 意思是:INSTALL_FAILED_TEST_ONLY
問題分析
各種查詢資料之後,發現並不是偶現。下面描述一下環境和各種配置。
環境:
軟件:Android Studio 3.0.1
gradle:4.1
jdk:1.8
清單文件中有一個不太常用的屬性,testOnly。
android:testOnly:應用是否是爲了測試,它可能向外暴露數據,引發安全漏洞,如果爲true,應用只能通過adb安裝。一般來說,項目中manifest不會去設置這個屬性,所以會默認爲false。
問題解決
1) 檢查Android Studio和gradle版本是否爲alpha版本,換爲穩定版本
2)檢查是否打開了Instant run功能,如果打開了關閉。
3)△ 檢查\app\src\main\AndroidMainfest.xml中是否有testOnly屬性爲true,如果有去掉或者改爲false
4)△ 運行生成安裝包的方式是Run app的話,試下Build apk(s)
(可能Google對AS3.0的又做了處理?Run app會將testOnly默認設置成true)
Make Project:
編譯Project下所有Module,一般是自上次編譯後Project下有更新的文件,不生成apk。
Make Selected Modules:
編譯指定的Module,一般是自上次編譯後Module下有更新的文件,不生成apk。
Clean Project:
刪除之前編譯後的編譯文件,並重新編譯整個Project,比較花費時間,不生成apk。
Rebuild Project:
先執行Clean操作,刪除之前編譯的編譯文件和可執行文件,然後重新編譯新的編譯文件,不生成apk,這裏效果其實跟Clean Project是一致的
Build APK:
前面4個選項都是編譯,沒有生成apk文件,如果想生成apk,需要點擊Build APK。
Generate Signed APK:
生成有簽名的apk(一般項目嵌入第三方,生成release包時必須混淆,否則無法生成apk)。
Run ‘app’是需要連接設備的。查了下國內和國外的關於Android Studio Build Apk(s)和Run ‘app’的區別:首先如果沒有關閉Instant Run情況下,Run ‘app’優先會使用Instant Run。
寫在後面
1、apk安裝錯誤代碼對應信息
錯誤提示信息列表一覽
INSTALL_FAILED_ALREADY_EXISTS: 程序已經存在
INSTALL_FAILED_INVALID_APK: 無效的APK
INSTALL_FAILED_INVALID_URI: 無效的鏈接
INSTALL_FAILED_INSUFFICIENT_STORAGE: 沒有足夠的存儲空間
INSTALL_FAILED_DUPLICATE_PACKAGE: 已存在同名程序
在 INSTALL_FAILED_UPDATE_INCOMPATIBLE: 版本不能共存
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE: 需求的共享用戶
簽名錯誤INSTALL_FAILED_MISSING_SHARED_LIBRARY: 需求的共享庫已丟失
INSTALL_FAILED_DEXOPT: dex優化驗證失敗
INSTALL_FAILED_OLDER_SDK : 系統版本過舊
INSTALL_FAILED_TEST_ONLY: 調用者不被允許測試的測試程序
CPU_ABIINSTALL_FAILED_MISSING_FEATURE: 使用了一個無效的特性
INSTALL_FAILED_INVALID_INSTALL_LOCATION: 無效的安裝路徑
INSTALL_FAILED_MEDIA_UNAVAILABLE: SD卡不存在
INSTALL_FAILED_INTERNAL_ERROR: 系統問題導致安裝失敗
DEFAULT: 未知錯誤