美文网首页
android:testOnly="true"

android:testOnly="true"

作者: act262 | 来源:发表于2017-12-07 16:11 被阅读483次

android:testOnly="true" 这个标记原本是用来标记测试用的,所以带这个标记的包一般情况下是不能安装上的,需要使用特殊的方式安装.AS3.0.0默认会在我们run的时候在application节点添加这个属性,然后在安装时会给我们加上 -t flag,所以在自己安装的时候没有问题.

issue

AS run 出来的包在连接的测试机上可以安装,但是给其他人安装时就会有问题.而且是竟然可以上传到应用商城去,没有被拒绝,导致用户下载了却提示不能安装。GooglePlay是不允许上传标记为test的包的。

从 apk 的 manifest 中查看信息,多出了android:testOnly="true"

<application
        ...
        android:name="io.micro.proj.PApplication"
        android:testOnly="true">
...
</application>

analysis

  1. 如果从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: ...]
  1. 如果在 application 节点强制指定为 false, 还需使用 tools="replace",不然还是会被覆盖为 true.

other

所以如果是作为发布的包一定不要从 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

相关文章

网友评论

      本文标题:android:testOnly="true"

      本文链接:https://www.haomeiwen.com/subject/epzdixtx.html