ADB 安装失败并显示 INSTALL_FAILED_TEST_ONLY

Posted

技术标签:

【中文标题】ADB 安装失败并显示 INSTALL_FAILED_TEST_ONLY【英文标题】:ADB Install Fails With INSTALL_FAILED_TEST_ONLY 【发布时间】:2014-10-06 02:41:57 【问题描述】:

我在将 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的问题?

【问题讨论】:

【参考方案1】:

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

如果您想将属性android:testOnly 保留为true,您可以使用带有-t 选项的pm install 命令,您可能需要先将push 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

【讨论】:

不需要adb push和pm install,可以在adb install命令后指定-t开关:adb install -t -r package.apk 不再需要推送 apk 在 adb install 中添加 -t 工作正常,完整命令请查看下面的答案。 adb push bin/hello.apk /tmp/ 对我不起作用,adb push ./debug.apk /sdcard/temp/debug.apk 起作用 adb install -t app/build/outputs/apk/usUnitedStates/debug/app-usUnited-debug.apk 为我工作。 谢谢。这解决了我的问题。我的应用程序是系统应用程序。因此需要 -f 。 -f: Install package on the internal system memory.【参考方案2】:

Android Studio 3.0.0 Beta 7 也有类似问题,无法再发布到 Play 商店。

如此处所述:https://developer.android.com/studio/run/index.html

注意:运行按钮构建一个带有 testOnly="true" 的 APK,这意味着 APK 只能通过 adb(Android Studio 使用)安装。如果 你想要一个人们可以在没有 adb 的情况下安装的可调试 APK,选择 您的调试变体,然后点击 Build > Build APK(s)。

对于发布版本也是如此,对于 Android Studio 3,您需要转到 Build &gt; Build APK(s) 以获得可以提交到商店的不可测试的发布 apk。

【讨论】:

我怀疑现在(2017 年 10 月/11 月)对于大多数到达这里的人来说,这是正确的答案。在 AS 3 之前,“Run”生成的 APK 甚至可以在 AS 之外安装,不,不是。 有更新,还有一些调整.. 我花了一段时间才弄明白:/ 完美。你节省了我的时间。我有同样的问题,我在项目的输出文件夹中发送了调试 apk。我不知道我应该使用 BUILD APK 构建它【参考方案3】:

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

【讨论】:

我编译的示例项目使用 'com.android.tools.build:gradle:2.4.0-alpha7' 并且没有使用稳定版本编译,只添加 -t 如上所述解决了问题我。 请解释-t的作用。 在 adb 帮助中,你会看到 install with -t 表示允许测试包 屏幕通过单击模块下拉菜单上的编辑配置启动 - 在 IDE 顶部的 Make 和 Run、Debug 按钮之间:developer.android.com/studio/run/rundebugconfig.html【参考方案4】:

在我的情况下,这个错误是在不稳定的 gradle 版本中。只需使用稳定版本的 gradle(不是 alpha,甚至不是 beta)。它为我修好了

【讨论】:

拯救了这一天!将 gradle 版本从 2.4.0-alpha3 更改为 2.3.0 坚持最前沿的代价...谢谢! 谁能确认设置 android:testOnly="true" 也可以修复不稳定的 gradle 版本?【参考方案5】:

搜索浏览了一整天,唯一的作品就是添加

android.injected.testOnly=false

gradle.properties 文件

【讨论】:

我能否在将密钥设置为 android.injected.testOnly = false 的情况下在 Play-store 上发布此构建,或者在上传到 Play-store 时将其恢复为“true”? @prahlad-v-thej 很确定情况正好相反:尝试将 testOnly 版本上传到 Play-Store 会失败。我怀疑谷歌添加了 testOnly 这样您就不会意外地将用于调试和测试的版本上传到商店。因为我在上传之前进行了干净的构建,所以对我来说并不重要。【参考方案6】:

我同意 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'

【讨论】:

【参考方案7】:

Android studio 3.0 生成仅用于测试的 APK。

我通过将“android:testOnly”属性添加到 android manifest 的标签来解决了这个问题。

 <application
    .....
    android:testOnly="false"
    android:theme="@style/AppTheme">

然后通过Android studio3.0 menu:Build-->Build APK(s)生成APK。

更多信息: https://commonsware.com/blog/2017/10/31/android-studio-3p0-flag-test-only.html

【讨论】:

【参考方案8】:

以前的帖子都没有解决我的问题。这是发生在我身上的事情: 我通常通过单击“运行”按钮从 android studio 加载应用程序。当你这样做时,android 会创建一个适合调试但不适合安装的应用程序。如果您尝试使用以下方式安装:

adb install -r yourapk

您将收到一条消息:

失败 [INSTALL_FAILED_TEST_ONLY]

发生这种情况时,您需要先清理构建,然后选择 Build->Build APK 来重建 apk。见下图:

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

希望对你有帮助

大卫

【讨论】:

你是救生员。我在发布版本(错误的密钥库)时遇到问题,想将调试版本分发给我的测试人员。 如果您使用的是appium,您需要为您的e2e方案功能指定"allowTestPackages": "true" @JoshuaPinter 你能详细说明在哪里放置 allowTestPackages": "true" @Girish 您将其添加到您的 Appium 驱动程序配置中,例如 config.allowTestPackages = true。请注意,这适用于使用 Appium 进行的端到端测试。【参考方案9】:

将此行添加到您的“gradle.properties”

android.injected.testOnly=false

【讨论】:

谢谢!这也将解决勺子转轮问题! @nicklee 我是否可以在 play-store 上发布这个构建,密钥设置为 android.injected.testOnly = false 或者我应该在上传到播放时将其恢复为“true”-商店?【参考方案10】:

如果要测试 apk,只需添加-t 命令行选项即可。

示例命令:

adb install -t .\app-debug.apk

【讨论】:

【参考方案11】:

在我的例子中是通过上传一个 APK,虽然它是用生产证书签名并且是一个发布变体,但它是由 Android 工作室的运行播放按钮生成的。 从 Gradle 或 Build APK 菜单选项生成 APK 后问题解决。

【讨论】:

Android Studio 3.0 开始出现这种情况,您的建议为我解决了问题。【参考方案12】:

Android 3.6.2。

构建 >> 构建/捆绑 apk >> 构建 apk

它工作正常。

【讨论】:

【参考方案13】:

我看到了接受的答案,但您不必实际推送 apk,然后在 adb shell 上运行命令直接 adb install with -t flag 确实有效

adb install -t "你电脑上的apk路径"

附上截图供参考

【讨论】:

【参考方案14】:

就我而言,使用 Android Studio 4.0,以下解决了该问题;

添加到“gradle.properties”文件;

android.injected.testOnly=false 

【讨论】:

【参考方案15】:

在不恢复到旧 gradle 版本的情况下,最简单的解决方法是在运行配置中添加“-t”选项(用于 pm install)。

testOnly='false' 没有任何效果。该错误是由 gradle 插件的 alpha 版本导致调试 APK '仅用于测试目的'。 -t 选项允许安装此类 APK。在运行配置中设置它会像往常一样自动安装您的 APK。

【讨论】:

【参考方案16】:

这对我有用 adb install -t myapk.apk

【讨论】:

【参考方案17】:

我不知道它是否对任何人有用,但是当我不小心尝试在稳定的 Android Studio 版本中使用测试 gradle 插件 ('gradle:2.4.0-alpha5') 版本构建和安装我的项目时,我收到了此错误消息(2.3,不是我之前下载并安装的2.4 preview 5 版本)。

当我意识到我的错误时,我启动了预览版 Android Studio,它构建并安装了我的项目没有任何问题。

【讨论】:

【参考方案18】:

我的发现如下。如果我使用 Android Studio UI 进行编译,并且生成了 APK,我不能只是

adb install <xxx.apk>

它将生成Failure [INSTALL_FAILED_TEST_ONLY]

我需要使用 gradle 编译它,即./gradlew app:assembleRelease。那么只有生成的apk,那就只能安装了。

这是因为 Android Studio UI Compile,只为特定设备生成测试 apk,而./gradlew app:assembleRelease 命令是要在所有设备上安装(并上传到 playstore)的实际 apk 生成

【讨论】:

请参阅medium.com/@elye.project/… 以更好地了解问题。【参考方案19】:

如documentation中所述:

Android Studio 会在你点击运行时自动添加这个属性

所以,为了能够使用 adb install &lt;path to apk file&gt; 安装您的 apk,您需要从终端组装构建:./gradlew assembleDebug 并使用 adb 安装。或者只需运行 ./gradlew installDebug 即可同时在设备上构建和安装。

【讨论】:

【参考方案20】:

从 Android Studio 构建您的发行版 .apk,如下所示

Build --> Build Apk(s)(用于未签名的构建) 构建 --> 生成签名的 APK(用于签名构建)

这些选项使用 android:testOnly="false" 选项构建 APK,允许您通过 commond 将 APK 显式安装到设备中。

adb install yourBuilT.apk

【讨论】:

【参考方案21】:

对我有用的是从右侧菜单的Gradle 工具栏中执行Refresh all Gradle projects

PFB 来自 Android Studio 的屏幕截图。

    从右侧菜单中选择Gradle 工具栏。 选择Refresh 图标

这为我解决了这个问题。

【讨论】:

谢谢伙计。它是在将 android gradle 升级到 4 后开始的。直接从 android studio 部署应用程序可以正常工作,但如果使用终端(adb install 等)就不行了。在你提到的刷新 gradle 之后它可以工作。 @user3193413 很高兴听到这个帖子有帮助【参考方案22】:

虽然我确信 Saurabh 的回答对其大多数人都有效,但我确实想确定为了安装我的 apk 而必须采取的额外步骤。

我尝试推送到设备,结果如下:

? adb push AppClient.TestOnly.App3.apk \tmp\
failed to copy 'AppClient.TestOnly.App3.apk' to '\tmp\': Read-only file system

环顾四周以更改文件系统 RW 权限后,我最终执行了以下命令:

? adb shell
255|shell@android:/ $ su
shell@android:/ # mount -o remount,rw /
mount -o remount,rw /

当我再次尝试推送时,我得到了这个:

? adb push AppClient.TestOnly.App3.apk /tmp
failed to copy 'AppClient.TestOnly.App3.apk' to '/tmp': Permission denied

我能够推送到 sdcard:

? adb push AppClient.TestOnly.App3.apk /sdcard/
3178 KB/s (99747 bytes in 0.030s)

此时我能够执行 Saurabh 的命令:

shell@android:/ # pm install -t /sdcard/AppClient.TestOnly.App3.apk
pm install -t /sdcard/AppClient.TestOnly.App3.apk
        pkg: /sdcard/AppClient.TestOnly.App3.apk
Success

【讨论】:

我应该补充一点,其中一些可能对其他人来说不是必需的。 感谢您付出的额外努力!【参考方案23】:

对我来说,它已经执行了 gradle 任务“clean”(在 :app 下,在 Gradle 窗格中,通常位于右侧)并再次运行该项目。

【讨论】:

【参考方案24】:

我尝试了外部项目,有多个 apk。

来自 Studio 的命令,看起来像

adb install-multiple -r ....

解决方案 -

选择控制台 使用-t 使用命令

【讨论】:

【参考方案25】:

如果您正在寻找一个不太持久的解决方案,然后将android.injected.testOnly=false 添加到您的 gradle.properties 文件中并且您不介意使用命令行,那么在安装之前执行以下两个命令即可:

rm -v **/build/**/AndroidManifest.xml
gradle build

对于 Windows 用户:从所有 build 目录中删除所有 AndroidManifest.xml。但不是来自 src 目录,所以DEL /S 不是最好的主意。

【讨论】:

【参考方案26】:

我遇到了同样的问题,没有答案有帮助。 最后,我发现我的安全文件夹(或安全文件夹,取决于手机品牌)中还有一个安装,当安卓卸载普通安装时,它并没有被删除。删除它并修复此问题。 希望这可以帮助其他人!

【讨论】:

【参考方案27】:

先删除不稳定版本:

adb uninstall 有问题的包名

;然后重新安装apk。

【讨论】:

不,这不起作用——我的测试脚本会在安装失败时自动卸载。

以上是关于ADB 安装失败并显示 INSTALL_FAILED_TEST_ONLY的主要内容,如果未能解决你的问题,请参考以下文章

Adb安装失败

尝试使用 kivy 制作的 buildozer 打包简单的计算器应用程序时出现错误“adb:安装失败”

adb方式在电视端安装apk并调试

安卓手机adb驱动安装失败的几个详细有效的解决方法

三星S8 连接win7 64位笔记本电脑,只有ADB驱动安装失败,有黄色叹号,怎么解决?

如何安装adb驱动 安装adb驱动的方法