android:testOnly="true" 這個(gè)標(biāo)記原本是用來(lái)標(biāo)記測(cè)試用的,所以帶這個(gè)標(biāo)記的包一般情況下是不能安裝上的,需要使用特殊的方式安裝.AS3.0.0默認(rèn)會(huì)在我們r(jià)un的時(shí)候在application節(jié)點(diǎn)添加這個(gè)屬性,然后在安裝時(shí)會(huì)給我們加上 -t flag,所以在自己安裝的時(shí)候沒(méi)有問(wèn)題.
issue
AS run 出來(lái)的包在連接的測(cè)試機(jī)上可以安裝,但是給其他人安裝時(shí)就會(huì)有問(wèn)題.而且是竟然可以上傳到應(yīng)用商城去,沒(méi)有被拒絕,導(dǎo)致用戶下載了卻提示不能安裝。GooglePlay是不允許上傳標(biāo)記為test的包的。
從 apk 的 manifest 中查看信息,多出了android:testOnly="true"
<application
...
android:name="io.micro.proj.PApplication"
android:testOnly="true">
...
</application>
analysis
- 如果從AS run的,可以從控制臺(tái)看到其用到的命令
12/07 16:02:44: Launching app
$ adb push F:\project\Project\app\build\outputs\apk\dev\debug\app-dev-debug.apk /data/local/tmp/io.micro.proj
$ adb shell pm install -t -r "/data/local/tmp/io.micro.proj"
Success
這里有個(gè)-t的flag,所以我們?cè)贏S下安裝時(shí)沒(méi)有提示安裝失敗。
如果需要自己命令行運(yùn)行安裝,則需要在adb install -t xxx添加 t 標(biāo)記
沒(méi)有-t標(biāo)記就會(huì)提示
Failure [INSTALL_FAILED_TEST_ONLY: ...]
- 如果在 application 節(jié)點(diǎn)強(qiáng)制指定為 false, 還需使用 tools="replace",不然還是會(huì)被覆蓋為 true.
other
所以如果是作為發(fā)布的包一定不要從 IDE 默認(rèn)構(gòu)建的,要么使用命令行去構(gòu)建,要么就是選擇build apk, 最好是通過(guò) CI 輸出apk, 這樣就不容易出錯(cuò)了.
參考:
https://commonsware.com/blog/2017/10/31/android-studio-3p0-flag-test-only.html
https://stackoverflow.com/questions/25274296/adb-install-fails-with-install-failed-test-only