如何使用ADB将特定应用程序移入/移出SD卡?

时间:2014-04-24 22:11:56

标签: android adb android-sdcard

背景

可以使用(基于this link)将默认安装设置为SD卡:

对于API14之前的

adb shell pm setInstallLocation 2 

适用于API 14及更高版本:

adb shell pm set-install-location 2 (Android 4.x)

问题

这仅适用于新安装的应用程序(或者您只是手动遍历每个应用程序并将其设置在那里),但我想知道如何将已安装的应用程序重新安装到SD卡中(并且还要回到内部存储。)

我尝试了什么

我尝试通过ADB读取可用的命令,并尝试运行下一个命令:

adb shell pm install -s -r -i com.example.test

但它不起作用

问题

假设内部存储(或SD卡)上已安装了应用程序,我如何使用ADB将其重新安装到SD卡(或内部)?

1 个答案:

答案 0 :(得分:7)

显然,需要提供APK的位置而不是包名。

我在Play Store上安装了VLC以后最终位于内部存储中的

$ adb shell pm install -s -r /data/app/org.videolan.vlc.betav7neon-1.apk
    pkg: /data/app/org.videolan.vlc.betav7neon-1.apk
Success
$

然后回到内部存储:

$ adb shell pm install -f -r /mnt/asec/org.videolan.vlc.betav7neon-1/pkg.apk
    pkg: /mnt/asec/org.videolan.vlc.betav7neon-1/pkg.apk
Success
$

更新1

以下是具有-i: specify the installer package name选项的相应命令。

转到SD卡:

$ adb shell pm install -i "com.android.vending" -s -r /data/app/org.videolan.vlc.betav7neon-1.apk
    pkg: /data/app/org.videolan.vlc.betav7neon-1.apk
Success

转到内部存储空间:

$ adb shell pm install -i "com.android.vending" -f -r /mnt/asec/org.videolan.vlc.betav7neon-1/pkg.apk
    pkg: /mnt/asec/org.videolan.vlc.betav7neon-1/pkg.apk
Success

更新2

使用-i是可选的,但如果不使用,则在移动过程中会丢失安装程序信息:

$ adb shell pm list packages -3 -i
package:org.videolan.vlc.betav7neon  installer=com.android.vending

$ adb shell pm install -s -r /data/app/org.videolan.vlc.betav7neon-1.apk
    pkg: /data/app/org.videolan.vlc.betav7neon-1.apk
Success

$ adb shell pm list packages -3 -i
package:org.videolan.vlc.betav7neon  installer=null

希望这有帮助。