1. 程式人生 > >Android Studio 生成apk安裝失敗 Run app : Installation error code: -15 / INSTALL_FAILED_TEST_ONLY

Android Studio 生成apk安裝失敗 Run app : Installation error code: -15 / INSTALL_FAILED_TEST_ONLY

寫在前面

最近又在使用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: 未知錯誤

2、Instant Run

Instant Run,是android studio2.0新增的一個執行機制,在你編碼開發、測試或debug的時候,它都能顯著減少你對當前應用的構建和部署的時間。 當我們第一次點選run、debug按鈕的時候,它執行時間和我們往常一樣。但是接下去的時間裡,你每次修改程式碼後點擊run、debug按鈕,對應的改變將迅速的部署到你正在執行的程式上,傳說速度快到你都來不及把注意力集中到手機螢幕上,它就已經做好相應的更改。