android:testOnly="true"
這個標記原本是用來標記測試用的,所以帶這個標記的包一般情況下是不能安裝上的,需要使用特殊的方式安裝.AS3.0.0默認會在我們run的時候在application節(jié)點添加這個屬性捞镰,然后在安裝時會給我們加上 -t flag隧魄,所以在自己安裝的時候沒有問題.
issue
AS run 出來的包在連接的測試機上可以安裝辩涝,但是給其他人安裝時就會有問題.而且是竟然可以上傳到應用商城去之剧,沒有被拒絕秉氧,導致用戶下載了卻提示不能安裝杉畜。GooglePlay是不允許上傳標記為test的包的锭碳。
從 apk 的 manifest 中查看信息,多出了android:testOnly="true"
<application
...
android:name="io.micro.proj.PApplication"
android:testOnly="true">
...
</application>
analysis
- 如果從AS run的欺税,可以從控制臺看到其用到的命令
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
這里有個-t
的flag环肘,所以我們在AS下安裝時沒有提示安裝失敗欲虚。
如果需要自己命令行運行安裝,則需要在adb install -t xxx
添加 t 標記
沒有-t
標記就會提示
Failure [INSTALL_FAILED_TEST_ONLY: ...]
- 如果在 application 節(jié)點強制指定為 false, 還需使用 tools="replace",不然還是會被覆蓋為 true.
other
所以如果是作為發(fā)布的包一定不要從 IDE 默認構建的,要么使用命令行去構建,要么就是選擇build apk
, 最好是通過 CI 輸出apk, 這樣就不容易出錯了.
參考:
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