android:testOnly="true"

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

  1. 如果從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: ...]
  1. 如果在 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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容