【问题标题】:Could not really install apk successfully via command line无法真正通过命令行成功安装 apk
【发布时间】:2020-11-18 10:05:33
【问题描述】:

Pixel 3XL 无法通过 adb 安装应用,但可以使用 AS run 安装应用 我使用命令行安装apk,它说它是成功的。但我在启动器中看不到图标。另外,当我尝试列出已安装的 apk 时,它不在列表中。

WM-C02WM0T3HTD8:~ zgong$ adb shell cmd package list packages | grep `common_string_in_package_name_with_installed_app_package`
package:A
package:B
package:C
package:D
WM-C02WM0T3HTD8:~ zgong$ adb install XXXX.apk
Performing Streamed Install
Success
WM-C02WM0T3HTD8:~ zgong$ adb shell cmd package list packages | grep `common_string_in_package_name_with_installed_app_package`
package:A
package:B
package:C
package:D

没有安装新的包。

WM-C02WM0T3HTD8:~ zgong$ adb shell cmd package list packages | grep `unique string_in_package_name`

没有安装新的包。

出现这个问题真是太奇怪了。

我可以使用 adb 为其他 Android 设备安装 apk。 我使用的是 Android 4.0.1。

有人知道怎么解决吗?

更新 1:

commen 说 adb install 是adb shell pm install 的包装器。 我运行adb shell pm 来获取选项手册。 似乎没有可以帮助调试的选项。

WM-C02WM0T3HTD8:android_vdca zgong$ adb shell pm
Package manager (package) commands:
  help
    Print this help text.



  install [-rtfdgw] [-i PACKAGE] [--user USER_ID|all|current]
       [-p INHERIT_PACKAGE] [--install-location 0/1/2]
       [--install-reason 0/1/2/3/4] [--originating-uri URI]
       [--referrer URI] [--abi ABI_NAME] [--force-sdk]
       [--preload] [--instant] [--full] [--dont-kill]
       [--enable-rollback]
       [--force-uuid internal|UUID] [--pkg PACKAGE] [-S BYTES]
       [--apex] [--wait TIMEOUT]
       [PATH [SPLIT...]|-]
    Install an application.  Must provide the apk data to install, either as
    file path(s) or '-' to read from stdin.  Options are:
      -R: disallow replacement of existing application
      -t: allow test packages
      -i: specify package name of installer owning the app
      -f: install application on internal flash
      -d: allow version code downgrade (debuggable packages only)
      -p: partial application install (new split on top of existing pkg)
      -g: grant all runtime permissions
      -S: size in bytes of package, required for stdin
      --user: install under the given user.
      --dont-kill: installing a new feature split, don't kill running app
      --restrict-permissions: don't whitelist restricted permissions at install
      --originating-uri: set URI where app was downloaded from
      --referrer: set URI that instigated the install of the app
      --pkg: specify expected package name of app being installed
      --abi: override the default ABI of the platform
      --instant: cause the app to be installed as an ephemeral install app
      --full: cause the app to be installed as a non-ephemeral full app
      --install-location: force the install location:
          0=auto, 1=internal only, 2=prefer external
      --install-reason: indicates why the app is being installed:
          0=unknown, 1=admin policy, 2=device restore,
          3=device setup, 4=user request
      --force-uuid: force install on to disk volume with given UUID
      --apex: install an .apex file, not an .apk
      --wait: when performing staged install, wait TIMEOUT milliseconds
          for pre-reboot verification to complete. If TIMEOUT is not
          specified it will wait for 60000 milliseconds. 

更新 2:

将 apk 复制到设备:

WM-C02WM0T3HTD8:android_vdca zgong$ adb push ~/Downloads/NonSIMCC-151-app-release-signed.apk /storage/emulated/0/Download/
/Users/zgong/Downloads/NonSIMCC-151-app-release-signed.apk: 1 file pushed. 12.7 MB/s (34493209 bytes in 2.597s)

通过 adb shell 使用 pm install

255|crosshatch:/storage/emulated/0/Download $ pm install NonSIMCC-151-app-release-signed.apk
avc:  denied  { read } for  scontext=u:r:system_server:s0 tcontext=u:object_r:fuse:s0 tclass=file permissive=0
System server has no access to read file context u:object_r:fuse:s0 (from path /storage/emulated/0/Download/NonSIMCC-151-app-release-signed.apk, context u:r:system_server:s0)
Error: Unable to open file: NonSIMCC-151-app-release-signed.apk
Consider using a file under /data/local/tmp/
Error: Can't open file: NonSIMCC-151-app-release-signed.apk

Exception occurred while executing 'install':
java.lang.IllegalArgumentException: Error: Can't open file: NonSIMCC-151-app-release-signed.apk
    at com.android.server.pm.PackageManagerShellCommand.setParamsSize(PackageManagerShellCommand.java:519)
    at com.android.server.pm.PackageManagerShellCommand.doRunInstall(PackageManagerShellCommand.java:1282)
    at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:1248)
    at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:184)
    at android.os.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:98)
    at android.os.ShellCommand.exec(ShellCommand.java:44)
    at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:21605)
    at android.os.Binder.shellCommand(Binder.java:929)
    at android.os.Binder.onTransact(Binder.java:813)
    at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4603)
    at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4306)
    at android.os.Binder.execTransactInternal(Binder.java:1159)
    at android.os.Binder.execTransact(Binder.java:1123)

更新 3

crosshatch:/ $ cp /storage/emulated/0/Download/NonSIMCC-151-app-release-signed.apk /data/local/tmp/apk1.apk
\crosshatch:/ $ ls -la /data/local/tmp
total 51656
drwxrwx--x 4 shell shell     3488 2020-11-19 10:13 .
drwxr-x--x 4 root  root      3488 2019-11-19 14:53 ..
drwxrwxrwx 4 shell shell     3488 2020-11-10 13:55 .studio
-rw-rw---- 1 shell shell 34493209 2020-11-19 10:13 apk1.apk
-rw-rw-rw- 1 shell shell  4322329 1970-01-01 08:00 apk1592483766800.apk
-rw-rw-rw- 1 shell shell  4808820 1970-01-01 08:00 apk1597806836158.apk
-rw-rw-rw- 1 shell shell  4808820 1970-01-01 08:00 apk1597807282659.apk
-rw-rw-rw- 1 shell shell  4375675 1970-01-01 08:00 apk1599201485983.apk
drwxrwxrwx 5 shell shell     3488 2020-11-02 00:17 perfd
-rw-rw-rw- 1 shell shell        8 1970-01-01 08:00 vysor.pwd
crosshatch:/ $ pm install /data/local/tmp/ap
apk1.apk              apk1592483766800.apk  apk1597806836158.apk  apk1597807282659.apk  apk1599201485983.apk
crosshatch:/ $ pm install /data/local/tmp/apk1.apk
Success
crosshatch:/ $ exit

验证是否真实安装

WM-C02WM0T3HTD8:android_vdca zgong$ /Users/zgong/Library/Android/sdk/build-tools/29.0.3/aapt2 dump packagename ~/Downloads/NonSIMCC-151-app-release-signed.apk
com.nonsimcc.vmcp
WM-C02WM0T3HTD8:android_vdca zgong$ adb shell cmd package list packages | grep vmcp

还是无法真正安装。

更新 4

我已尝试重新启动我的 Pixel 3XL 设备。还是倒霉。

更新 5

刚刚测试并得到奇怪的结果:

Android Studio,点击运行,即可安装启动应用。

WM-C02WM0T3HTD8:mep_login_android zgong$ adb shell cmd package list packages | grep com.visa.mobileEnablement.loginFeatureDemo
package:com.visa.mobileEnablement.loginFeatureDemo

在 Android Studio 的运行部分

11/19 11:51:07: Launching 'demoApp' on Google Pixel 3 XL.
Install successfully finished in 1 s 290 ms.
$ adb shell am start -n "com.visa.mobileEnablement.loginFeatureDemo/com.visa.mobileEnablement.loginFeatureDemo.DemoActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 27798 on device 'google-pixel_3_xl-8BBY0WYAG'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.

使用从 Run 构建的相同 apk,并使用 adb install

WM-C02WM0T3HTD8:mep_login_android zgong$ adb install -t demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk
Performing Streamed Install
Success
WM-C02WM0T3HTD8:mep_login_android zgong$ adb shell cmd package list packages | grep com.visa.mobileEnablement.loginFeatureDemo

adb install和Android Studio安装流程有什么区别?

更新 6:

已尝试撤销 USB 调试授权 还是倒霉。

WM-C02WM0T3HTD8:mep_login_android zgong$ adb install -t demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apkPerforming Streamed Install
Success
WM-C02WM0T3HTD8:mep_login_android zgong$ adb shell cmd package list packages | grep com.visa.mobileEnablement.loginFeatureDemo

还尝试关闭开发者选项并重新打开它。 设置 USB 首选项 - 使用 USB,选择 PTP 或无数据传输。 还是倒霉

WM-C02WM0T3HTD8:mep_login_android zgong$ adb install -t demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apkPerforming Streamed Install
Success
WM-C02WM0T3HTD8:mep_login_android zgong$ adb shell cmd package list packages | grep com.visa.mobileEnablement.loginFeatureDemo

更新 7:

我注意到我需要更新操作系统。

更新 7

由于abi不匹配,安装到模拟器时“adb install”不起作用

我创建了一个 AVD

Name: Pixel_3_XL_API_Q

CPU/ABI: Google APIs Intel Atom (x86)

Path: /Users/zgong/.android/avd/Pixel_3_XL_API_Q.avd

Target: google_apis [Google APIs] (API level Q)

Skin: pixel_3_xl

fastboot.chosenSnapshotFile: 

runtime.network.speed: full

hw.accelerometer: yes

hw.device.name: pixel_3_xl

hw.lcd.width: 1440

image.androidVersion.codename: Q

hw.initialOrientation: Portrait

image.androidVersion.api: 28

tag.id: google_apis

hw.mainKeys: no

hw.camera.front: emulated

avd.ini.displayname: Pixel 3 XL API Q

hw.gpu.mode: auto

hw.ramSize: 8192

PlayStore.enabled: false

fastboot.forceColdBoot: no

hw.cpu.ncore: 4

hw.keyboard: yes

hw.sensors.proximity: yes

hw.dPad: no

hw.lcd.height: 2960

vm.heapSize: 4096

skin.dynamic: yes

hw.device.manufacturer: Google

hw.gps: yes

hw.audioInput: yes

image.sysdir.1: system-images/android-Q/google_apis/x86/

showDeviceFrame: yes

hw.camera.back: virtualscene

AvdId: Pixel_3_XL_API_Q

hw.lcd.density: 560

hw.arc: false

hw.device.hash2: MD5:9bbaa408d4a8691920c4057ef7844f35

fastboot.forceChosenSnapshotBoot: no

fastboot.forceFastBoot: yes

hw.trackBall: no

hw.battery: yes

hw.sdCard: no

tag.display: Google APIs

runtime.network.latency: none

disk.dataPartition.size: 40G

hw.sensors.orientation: yes

avd.ini.encoding: UTF-8

hw.gpu.enabled: yes

我尝试安装从 Android Studio 构建的相同 apk。

WM-C02WM0T3HTD8:mep_login_android zgong$ adb -e install -t -r demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk
Performing Streamed Install
adb: failed to install demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]

更新 8: 安装到另一台设备时“adb install”工作

所以我使用相同的版本将它安装在另一台 Pixel 3 设备上。可以正确安装。

WM-C02WM0T3HTD8:mep_login_android zgong$ adb -d install -t demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk
Performing Streamed Install
Success

这样,我们排除了构建的嫌疑人。

更新 9:

在以前无法使用的 Pixel 3XL 上:

WM-C02WM0T3HTD8:mep_login_android zgong$ /Users/zgong/Library/Android/sdk/build-tools/29.0.3/aapt2 dump packagename demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk
com.visa.mobileEnablement.loginFeatureDemo


WM-C02WM0T3HTD8:mep_login_android zgong$ adb -d uninstall com.visa.mobileEnablement.loginFeatureDemo
Success
WM-C02WM0T3HTD8:mep_login_android zgong$ adb install demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk
error: more than one device/emulator
Performing Push Install
adb: error: failed to get feature set: more than one device/emulator
WM-C02WM0T3HTD8:mep_login_android zgong$ adb -d install demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk
Performing Streamed Install
adb: failed to install demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk: Failure [INSTALL_FAILED_TEST_ONLY: installPackageLI]
WM-C02WM0T3HTD8:mep_login_android zgong$ adb -d install -t demoApp/build/outputs/apk/classic/debug/demoApp-classic-debug.apk
Performing Streamed Install
Success
WM-C02WM0T3HTD8:mep_login_android zgong$ adb shell cmd package list packages | grep visaerror: more than one device/emulator
WM-C02WM0T3HTD8:mep_login_android zgong$ adb -d shell cmd package list packages | grep com.visa.mobileEnablement.loginFeatureDemo
package:com.visa.mobileEnablement.loginFeatureDemo

现在我可以在 Launcher 中看到图标并可以启动应用程序了。太神奇了。

【问题讨论】:

  • 嗨弗朗西斯。我不知道。但是“adb install”是命令“pm install”的包装,可以通过“adb shell”在设备上本地运行。当你直接安装包时,你可以传入更多的命令行选项并接收额外的输出。问题仅发生在此 APK 还是所有 APK?
  • @Elletlar 我查看了adb shell pm install,您认为哪些选项可以帮助解决问题?其他 APK 也会出现此问题。
  • 没什么特别的,我想如果您将 APK 文件复制到设备然后直接运行“pm install”而不是“adb install”,您可能会在“adb shell”中看到一些额外的输出。如果您希望描述它的大多数 StackOverflow 帖子不再起作用,我可以将我的操作过程发送给您。
  • 但是关于您的问题,我可能会尝试您可能已经尝试过的相同操作:重新启动手机并重新启动 ADB,使用设备设置下的“开发人员选项”,确保任何“ Untrusted Sources 的设置设置为允许,确保 Manifest 有 MAIN 和 LAUNCHER,检查通知托盘是否有任何待处理的安装权限请求等
  • 只有我想知道的事情。首先执行“adb uninstall ”是否会有所不同。安装到模拟器或其他设备时“adb install”是否有效。 “adb install”是否适用于您的环境中未构建的第 3 方 .apk。如果您在 APK 中禁用 proguard,在 Gradle 中关闭 minify 等是否有效。在 adb 上发出 kill 和 restart 帮助...

标签: android adb


【解决方案1】:

卸载apk(adb uninstall)再执行adb install时修复

WM-C02WM0T3HTD8:Downloads zgong$ adb -d install ~/Downloads/NonSIMCC-151-app-release-signed.apk
Performing Streamed Install
Success
WM-C02WM0T3HTD8:Downloads zgong$ /Users/zgong/Library/Android/sdk/build-tools/29.0.3/aapt2 dump packagename ~/Downloads/NonSIMCC-151-app-release-signed.apk
com.nonsimcc.vmcp
WM-C02WM0T3HTD8:Downloads zgong$ adb -d shell cmd package list packages | grep com.nonsimcc.vmcp
WM-C02WM0T3HTD8:Downloads zgong$ adb uninstall com.nonsimcc.vmcp
error: more than one device/emulator
- waiting for device -
error: more than one device/emulator
WM-C02WM0T3HTD8:Downloads zgong$ adb -d uninstall com.nonsimcc.vmcp
Success
WM-C02WM0T3HTD8:Downloads zgong$ adb -d shell cmd package list packages | grep com.nonsimcc.vmcp
WM-C02WM0T3HTD8:Downloads zgong$ adb -d install ~/Downloads/NonSIMCC-151-app-release-signed.apk
Performing Streamed Install
Success
WM-C02WM0T3HTD8:Downloads zgong$ adb -d shell cmd package list packages | grep com.nonsimcc.vmcp
package:com.nonsimcc.vmcp

【讨论】:

  • 太棒了! :) 人们有时会给我带来手机,说通过 UI 卸载并没有完全删除应用程序。在这些情况下,即使在“设置 -> 应用程序”下没有可卸载的内容,他们也无法安装 APK。但真正的“adb install”如果无法完成该过程,则应该报告失败......另一件可能有帮助的事情是通过“adb install -r”进行“替换”。即使已经存在具有相同版本号的 APK,它也应该安装该 APK。当需要模拟时,它也是从 Playstore 更新的一个不错的近似值。
  • 同意。猜猜我们需要进一步调查根本原因。
【解决方案2】:

去构建然后构建包/APK然后构建APK

【讨论】:

  • 抱歉,问题的重点是如果我只有 apk 会怎样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
相关资源
最近更新 更多