之前一次不消息把 Google Play Store 中的自动更新启用了,之后一个夜里把所有应用都更新了,不过有些应用本来就不想升级的,比如网易云音乐(有一些低版本没有广告,没有乱七八糟的直播什么的),微信。所以想着能不能在不丢失数据的情况下降级应用。简单的搜索了一下果然可以。

这里需要使用到 adb 命令,不同的系统直接安装即可,我现在在 Linux 下之前就已经安装过。

macOS 下:

brew cask install android-platform-tools

执行:

adb devices

查看是否连接,如果出现了设备 ID,则表明连接成功了。

然后准备好特定版本的 apk。

adb push wechat_7.0.0.apk /sdcard/Download/wechat_7.0.0.apk

然后进入下一步:

adb shell

进入系统的 shell 环境。

pm install -d -r /sdcard/Download/wechat_7.0.0.apk

说明:

  • -d 表示运行降级安装
  • -r 表示保存数据重新安装现有应用

如果无法安装报错:

255|OnePlus7Pro:/ $ pm install -d -r /sdcard/Download/wechat_7.0.0.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 /sdcard/Download/wechat_7.0.0.apk, context u:r:system_server:s0)
Error: Unable to open file: /sdcard/Download/wechat_7.0.0.apk
Consider using a file under /data/local/tmp/
Error: Can't open file: /sdcard/Download/wechat_7.0.0.apk

Exception occurred while executing 'install':
java.lang.IllegalArgumentException: Error: Can't open file: /sdcard/Download/wechat_7.0.0.apk
	at com.android.server.pm.PackageManagerShellCommand.setParamsSize(PackageManagerShellCommand.java:520)
	at com.android.server.pm.PackageManagerShellCommand.doRunInstall(PackageManagerShellCommand.java:1283)
	at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:1249)
	at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:185)
	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:22322)
	at android.os.Binder.shellCommand(Binder.java:940)
	at android.os.Binder.onTransact(Binder.java:824)
	at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4644)
	at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4515)
	at android.os.Binder.execTransactInternal(Binder.java:1170)
	at android.os.Binder.execTransact(Binder.java:1134)

那么需要将 apk 移动到 /data/local/tmp/:

mv /sdcard/Download/wechat_7.0.0.apk /data/local/tmp/

然后再安装:

pm install -d -r /data/local/tmp/wechat_7.0.0.apk

如果还不行,那么可以保留数据卸载应用然后重新安装:

pm uninstall -k com.tencent.mm
pm install -d /data/local/tmp/wechat_7.0.0.apk