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

and*_*per 4 android adb android-sdcard

背景

可以使用(基于此链接)将默认安装设置为SD卡:

对于预先API14:

adb shell pm setInstallLocation 2 
Run Code Online (Sandbox Code Playgroud)

API 14及以上版本:

adb shell pm set-install-location 2 (Android 4.x)
Run Code Online (Sandbox Code Playgroud)

问题

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

我试过的

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

adb shell pm install -s -r -i com.example.test
Run Code Online (Sandbox Code Playgroud)

但它没有用

这个问题

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

ozb*_*bek 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
$
Run Code Online (Sandbox Code Playgroud)

然后回到内部存储:

$ 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
$
Run Code Online (Sandbox Code Playgroud)

更新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
Run Code Online (Sandbox Code Playgroud)

移至内部存储:

$ 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
Run Code Online (Sandbox Code Playgroud)

更新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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.