跳过内容

MASTG-TECH-0005: 安装应用

基本 APK 安装

使用 adb install 命令在模拟器或连接的设备上安装 APK。给定的路径是主机上 APK 的路径。

adb install ./myApp.apk

如果连接了多个设备,您可以指定安装到连接的设备 (-d),模拟器或 TCP/IP 设备 (-e) 或特定的序列号 (-s)。

# Install to connected physical device
adb -d install ./myApp.apk

# Install to emulator
adb -e install ./myApp.apk

# List all devices
adb devices
List of devices attached
37081JEHN05882  device
emulator-5554   device

# Connect to a specific device
adb -s 37081JEHN05882 install ./myApp.apk

安装应用程序时,也可以使用 -g 自动授予所有运行时权限

adb install -g ./myApp.apk

安装重新打包的应用

如果已经安装了具有相同包名的应用程序,Android 将比较签名。如果签名匹配,更新将成功。如果签名不同(例如,在重新打包 APK 后),安装将失败。

adb install ./myRepackagedApp.apk
adb: failed to install myRepackagedApp.apk: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Existing package org.owasp.mastestapp signatures do not match newer version; ignoring!]

要解决此问题,请首先使用 adb uninstall 删除原始应用程序

# Uninstall based on package name
adb uninstall org.owasp.mastestapp

# Normal install via adb
adb install ./myRepackagedApp.apk

安装到特定用户配置

要将 APK 安装到特定的用户配置,首先必须将 APK 推送到设备,因为不能使用 adb install 直接执行此操作。 请注意,推送到 /sdcard/ 可能会导致权限问题,因此请使用 /data/local/tmp 以确保万无一失。 将 APK 推送到设备后,可以使用带有 --user XX 选项的 pm install 安装它

# Get an overview of available profiles
adb shell pm list users
Users:
    UserInfo{0:Owner:c13} running
    UserInfo{11:Sample Managed Profile:1030} running

# Push to /data/local/tmp/
adb push ./myApp.apk /data/local/tmp/

# Install with pm install and the --user option
adb shell pm install --user 11 /data/local/tmp/myRepackagedApp.apk

安装分离的 APK

如果需要安装分离的 APK,可以使用 install-multiple 命令。确保不同的分离 APK 与您的设备配置匹配

# Youtube is a split APK
adb shell pm path com.google.android.youtube
package:/data/app/~~ZLX3UNTF7R2oebU_viP7mw==/com.google.android.youtube-Rhm4GURIQ4twNvR6wxqc6w==/base.apk
package:/data/app/~~ZLX3UNTF7R2oebU_viP7mw==/com.google.android.youtube-Rhm4GURIQ4twNvR6wxqc6w==/split_config.arm64_v8a.apk
package:/data/app/~~ZLX3UNTF7R2oebU_viP7mw==/com.google.android.youtube-Rhm4GURIQ4twNvR6wxqc6w==/split_config.en.apk
package:/data/app/~~ZLX3UNTF7R2oebU_viP7mw==/com.google.android.youtube-Rhm4GURIQ4twNvR6wxqc6w==/split_config.xxhdpi.apk

# Obtain the different parts
adb pull /data/app/~~ZLX3UNTF7R2oebU_viP7mw==/com.google.android.youtube-Rhm4GURIQ4twNvR6wxqc6w==/base.apk
adb pull /data/app/~~ZLX3UNTF7R2oebU_viP7mw==/com.google.android.youtube-Rhm4GURIQ4twNvR6wxqc6w==/split_config.arm64_v8a.apk
adb pull /data/app/~~ZLX3UNTF7R2oebU_viP7mw==/com.google.android.youtube-Rhm4GURIQ4twNvR6wxqc6w==/split_config.en.apk
adb pull /data/app/~~ZLX3UNTF7R2oebU_viP7mw==/com.google.android.youtube-Rhm4GURIQ4twNvR6wxqc6w==/split_config.xxhdpi.apk

# Uninstall Youtube as a test
adb uninstall com.google.android.youtube

# Install the split APK files
adb install-multiple base.apk split_config.arm64_v8a.apk split_config.en.apk split_config.xxhdpi.apk