ADB安装失败,提示"INSTALL_FAILED_TEST_ONLY"错误

275

我在安装apk到我的设备时遇到了问题。

adb install <.apk>

使用上述命令将返回以下内容:

5413 KB/s (99747 bytes in 0.017s)
        pkg: /data/local/tmp/AppClient.TestOnly.App3.apk
Failure [INSTALL_FAILED_TEST_ONLY]

你有什么想法导致这个问题出现?

它确实识别了设备。这可能是apk的问题吗?

27个回答

374

看起来您需要修改AndroidManifest.xml
android:testOnly="true"更改为android:testOnly="false"或删除此属性。

如果您想保留android:testOnly属性为true,则可以使用带有-t选项的pm install命令,但是您可能需要先将apk推送到设备上。

$ adb push bin/hello.apk /tmp/
5210 KB/s (825660 bytes in 0.154s)

$ adb shell pm install /tmp/hello.apk 
    pkg: /tmp/hello.apk
Failure [INSTALL_FAILED_TEST_ONLY]

$ adb shell pm install -t /tmp/hello.apk 
    pkg: /tmp/hello.apk
Success

我能够重现相同的问题并且上述解决方法可行。

如果你的APK文件在设备之外(在你的桌面上),那么下面的命令可以实现:

$ adb install -t hello.apk

105
不需要使用adb push和pm install命令,你只需在adb install命令后面加上-t开关即可:adb install -t -r package.apk。 - marioc64
不需要再推送apk了,使用“-t”在adb install中可以正常工作,完整命令请查看下面的答案。 - amIT
adb push bin/hello.apk /tmp/ 对我来说不起作用,但是 adb push ./debug.apk /sdcard/temp/debug.apk 起作用了。 - HendraWD
adb install -t app/build/outputs/apk/usUnitedStates/debug/app-usUnited-debug.apk 对我有效。 - Sulav Timsina
谢谢。那解决了我的问题。我的应用是系统应用,因此需要使用“-f”。 -f:将软件包安装在内部系统存储器上。 - Julian
android:testOnly="true" 只在 build/intermediates/**/AndroidManifest.xml 文件中设置。因此,在第一种情况下我从未添加该标志。 - Martin

111

我曾经在使用Android Studio 3.0.0 Beta 7时遇到类似的问题,无法再将应用程序发布到Play商店了。

如此说道:https://developer.android.com/studio/run/index.html

请注意:运行按钮会构建一个带有testOnly =“true”的APK文件,这意味着该APK文件只能通过adb(Android Studio使用)安装。如果您想要一个可调试的APK文件,用户可以在没有adb的情况下安装,请选择您的调试版本并单击Build > Build APK(s)。

对于发布版本同样适用,在Android Studio 3中,您需要转到Build > Build APK(s)来生成一个不可测试的发布APK文件,以便您可以提交到商店。


8
我猜现在(2017年10月/11月)对于大多数来到这里的人来说,这是正确的答案。在AS 3之前,“运行”生成的APK甚至可以在AS之外进行安装,但现在不行了。 - noamtm
有更新,还有一些微调...花了我一段时间才弄明白:/ - ruben
太好了,你节省了我的时间。我遇到了同样的问题,我将调试apk发送到项目的输出文件夹中。我不知道我应该使用BUILD APK来构建它。 - Reza

75
添加-t安装标志,如下图所示:

answer is in the red box


我编译的示例项目使用'com.android.tools.build:gradle:2.4.0-alpha7',并且不能与稳定版本一起编译,只有添加-t才能解决我的问题。 - BubbaGum
15
请解释一下 -t 是什么意思。 - rmtheis
5
在adb帮助文档中,你会看到使用“-t”参数的install命令表示允许安装测试包。 - xiaoyee
通过在 IDE 顶部的 Make 和 Run、Debug 按钮之间的模块下拉菜单上点击 Edit Configurations,可以启动屏幕:https://developer.android.com/studio/run/rundebugconfig.html - Gene Bo
从命令行中,你可以运行"adb"命令来查看标志的含义,即:"-t:允许测试包"。 - undefined

56

在我的情况下,这个错误是因为使用了不稳定的Gradle版本。只需使用稳定版本的Gradle(不是alpha版,甚至不是beta版),问题就得到解决了。


1
救了个急!将Gradle版本从2.4.0-alpha3更改为2.3.0。 - Reaz Murshed
1
坚持走在技术前沿的代价...谢谢! - Ryan R
有人能确认一下 android:testOnly="true" 的设置是否也可以解决不稳定的 gradle 版本的问题吗? - GPS

54

经过一整天的搜索和浏览,唯一有效的方法是添加

android.injected.testOnly=false

gradle.properties 文件


我能否将此版本发布到Play商店,密钥设置为android.injected.testOnly = false,还是在上传到Play商店时应将其恢复为“true”? - Prahlad V Thej
@prahlad-v-thej 我很确定相反的情况是正确的:试图将 testOnly 版本上传到 Play 商店将会失败。我怀疑 Google 添加了 testOnly,以便您不会意外地将用于调试和测试的版本上传到商店。由于我在上传之前进行干净的构建,所以这对我来说并不重要。 - Martin
这是可以运行的,但是毫无疑问应用程序在开发方面更有限... :( - android developer

28

我同意Elisey的观点。在使用2.4预览版打开项目后,然后又在android studio 2.3中打开同一个项目,我也遇到了相同的错误。

通过更改build.gradle文件中的这一行代码来解决了这个问题:

classpath 'com.android.tools.build:gradle:2.4.0-alpha5'

classpath 'com.android.tools.build:gradle:2.3.1'

27

之前的帖子都没有解决我的问题。以下是我的情况:
我通常通过单击“运行”按钮从Android Studio加载应用程序。这样做时,Android会创建一个适用于调试但不适用于安装的应用程序。如果您尝试使用以下方式进行安装:

adb install -r yourapk

您将收到一条消息,上面写着:

Failure [INSTALL_FAILED_TEST_ONLY]

当出现这种情况时,您需要首先清除构建,然后选择“构建”->“构建APK”来重新构建APK。请参见下面的图片:

build android apk

此APK已准备好通过adb install命令或任何其他方法安装

希望这可以帮助

大卫


你真是救星啊。我在发布版本构建时遇到了问题(密钥库有误),想要向我的测试人员分发调试版本构建。 - drulabs
如果您正在使用Appium,则需要将"allowTestPackages": "true"指定给您的e2e方案功能。 - Joshua Pinter
@JoshuaPinter,您能否详细说明在哪里放置allowTestPackages": "true"? - Girish
@Girish,你需要将其添加到你的Appium驱动程序配置中,例如config.allowTestPackages = true。请注意,这仅适用于使用Appium进行端到端测试的情况。 - Joshua Pinter

20

16

将此行添加到您的 'gradle.properties' 中

android.injected.testOnly=false

谢谢!这也将解决勺子运行器的问题! - Basim Sherif
@nicklee,如果我将密钥设置为android.injected.testOnly = false,那么我能否在Play商店上发布此版本,还是在上传到Play商店时应该将其恢复为“true”? - Prahlad V Thej

16
如果你想测试apk,只需添加-t命令行选项即可。
示例命令:
adb install -t .\app-debug.apk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接