【问题标题】:ADB Install Fails With INSTALL_FAILED_TEST_ONLYADB 安装失败并显示 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的问题?

【问题讨论】:

    标签: android installation apk adb


    【解决方案1】:

    看来您需要修改您的AndroidManifest.xml
    android: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 生成

                      【讨论】:

                      【解决方案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 的屏幕截图。

                          1. 从右侧菜单中选择Gradle 工具栏。
                          2. 选择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。

                                  【讨论】:

                                  • 不,这不起作用——我的测试脚本会在安装失败时自动卸载。
                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2016-10-05
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2018-07-04
                                  • 2014-06-01
                                  相关资源
                                  最近更新 更多