解决方案:安卓MTK设备上卸载和安装旧版本APK文件的方法
背景信息
本次问题描述涉及的是一个运行在联发科(MTK)SoC的工程师版设备上。用户试图卸载名为apk.package.name
的旧版本应用,并将更新后的新版本(即1.0 build 1)安装到同一个位置,但是遇到了INSTALL_FAILED_VERSION_DOWNGRADE
错误。此外还提到了APK文件会在重启后自动恢复安装问题。
问题及解决方案
卸载应用程序
- 单纯将apk文件删除或移动并不够彻底地从设备上移除该应用,因为其元数据仍然保留在系统中。
- 可以使用ADB命令
adb shell pm uninstall apk.package.name
来真正卸载它。这个命令会将元数据从包管理器数据库中清除。
检查和删除残留文件
查看是否还有apk的其他版本或依赖项被保留在系统路径内,除了/system/app/apk.package.name
或者/data/data/apk.package.name
外,在某些设备上也可能存有/system/priv-app
目录下的副本:
shell
adb shell rm -r /system/app/apk.package.name
adb shell rm -r /system/priv-app/apk.package.name
adb shell rm -r /data/data/apk.package.name解决重启后自动恢复问题
如果上述步骤仍然不能清除apk文件,检查是否有在启动时重新安装的应用程序列表或者脚本(例如.rc
或.sh
文件)中确认,这些可能是确保应用在重启后能够被恢复的原因。尝试手动安装
在所有清理并移除了旧版本之后,使用管理员权限尝试重新安装新的apk。
shell
adb root
adb remount
adb push apkfile.apk /system/priv-app/
adb shell chmod 644 /system/priv-app/apkfile.apk
adb shell pm install -r path/to/apkfile.apk启动应用检查
在新的apk文件安装完成后,再尝试启动应用。
shell
adb shell am start -n apk.package.name/.MainActivity检查其他潜在位置
检查是否有误安装的包存在:
shell
adb shell ls /system/app
adb shell ls /vendor/app
adb shell ls /vendor/priv-app
adb shell ls /system/priv-app
adb shell find / -name apk.package.name 2>/dev/null
注意点
- 此解决方案假设用户具备必要的开发者模式及root权限;
- 调用
pm install
和pm uninstall
可能需要在适当的位置创建对应的.apk
或清除路径内的app_name.merged JurisdictionManifest.xml
; - 通过ADB执行上述命令前,请确保已经与设备正确地建立了连接。
通过以上步骤,应能够解决用户遇到的问题。如果问题仍然存在,则建议联系更高级的技术支持或进行其他形式的诊断测试。