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.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 > 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 <path to apk file>
安装您的 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的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 kivy 制作的 buildozer 打包简单的计算器应用程序时出现错误“adb:安装失败”