Android Studio坚持安装APK,adb有时无法安装APK,并且Android Studio某种程度上干扰了adb的install命令

问题描述

Some time ago I had trouble with my Huawei P30 and ADB/Android Studio installing APKs.事实证明我正在使用过时版本的库/工具。解决了,愉快地继续前进。

现在我的手机已升级到Android 10,我面临的问题与以前非常相似,但是我似乎无法以相同的方式来解决(通过更新库)。我尝试安装每种工具的多个版本,进行Android Studio和Android相关工具的全新安装,但似乎无济于事。

Android Studio

当前行为是Android Studio生成APK只是为了以后无限期地卡在“安装”步骤中。在少量测试中,它会失败。

ADB

我还尝试使用adb从命令行安装APK,但结果不一。

$ adb version
Android Debug Bridge version 1.0.41
Version 30.0.4-6686687

运行Android Studio时,安装该应用程序要么失败,要么无限期挂起,就像在Android Studio中一样:

$ cd .../platform-tools

$ adb start-server
* daemon not running; starting Now at tcp:5037
* daemon started successfully

$ adb install C:\...\example.apk
Performing Streamed Install
adb: Failed to install C:\...\example.apk

$ adb install C:\...\example.apk
Performing Streamed Install

^^^ Hangs there forever

现在,事情变得有趣了,如果我关闭Android Studio,则安装APK大约50%的时间会成功安装(另一半安装失败并重新启动电话连接):

$ cd .../platform-tools

$ adb kill-server

$ adb start-server
* daemon not running; starting Now at tcp:5037
* daemon started successfully

$ adb install C:\...\example.apk
Performing Streamed Install
adb: Failed to install C:\...\example.apk

$ adb kill-server

$ adb start-server
* daemon not running; starting Now at tcp:5037
* daemon started successfully

$ adb install C:\...\example.apk
Performing Streamed Install
Success

$ adb kill-server

$ adb install C:\...\example.apk
* daemon not running; starting Now at tcp:5037
* daemon started successfully
Performing Streamed Install
Success

$ adb kill-server

$ adb install C:\...\example.apk
* daemon not running; starting Now at tcp:5037
* daemon started successfully
Perform
adb: Failed to install C:\...\example.apk

我可以轻松执行其他操作,例如将文件推送到手机中或卸载应用程序。到目前为止,该问题仅与安装APK有关:

$ adb shell pm uninstall com.example
Success

$ adb push C:\...\app-debug.apk /sdcard/APKs
C:\DropBox...\app-debug.apk: 1 file pushed,0 skipped. 15.2 MB/s (31131771 bytes in 1.956s)

为什么安装应用程序失败或成功,就像掷硬币一样?这可能是驱动程序问题吗? Android Studio如何干扰单独运行adb工具的成功率?

解决方法

尝试使用 ./gradlew installDebug 安装您的应用程序。它可能会给出失败的原因

您还可以使用 Android 的 Studio 用户界面:

Gradle UI

,

尝试禁用USB调试模式,然后在手机上再次启用它。有时,将其设置为启用时,它会被窃听并像禁用它一样起作用

,

如果设备上存在该软件包,则可以先将其卸载:

检查您的应用的程序包名称是否存在

$ adb shell dumpsys package com.package.name
  • 如果存在:
$ adb shell pm uninstall --user 0 com.package.name

如果卸载失败,则该应用程序可能是设备管理员或设备所有者。

  • 如果不存在:

尝试更改Android Studio的安装标志: 运行>编辑配置>安装标志

pm install --user 0

注意:该命令为pm install --user 0,没有adb shell

更新

让我们假设该应用程序从未安装在设备上。

  1. 首次安装
adb install myapp.apk

命令将成功执行,并且将安装应用程序。

  1. 第二次安装
adb install myapp.apk

该命令将失败,因为您已经安装了软件包com.package.name

第二次安装时,应先卸载:

adb uninstall com.package.name
adb install myapp.apk

或强制重新安装:

adb install -r myapp.apk
,

尝试将adb更新到最新版本

可以解决:adb install xxx.apk停留在执行流式安装中

更多详细信息,请参见:android - Error: ADB exited with exit code 1 Performing Streamed Install - Stack Overflow