问题描述
曾经将一个应用程序移动到SD卡上。后来进行了恢复出厂设置。然后重新安装了该应用程序。该应用程序是由Humble Bundle应用程序侧加载的,而不是从Google Play下载的。现在这个应用程序无法移动到SD卡,出现错误“无法移动应用程序”。用户猜测可能是因为SD卡上已经存在了该应用程序的某些Android缓存,导致无法再次移动,但这只是一种猜测。Titanium备份也无法移动它。欢迎任何想法。手机型号是HTC Sensation。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
最有可能的是您在SD卡上留下了一些已移动应用程序的残余文件。最简单的方法可能是将SD卡取出,并在计算机上删除移动的应用程序(在手机上无法轻易访问)。
例如,我手机上移动的tricorder应用程序的完整路径是:/mnt/sdcard/.android_secure/org.hermit.tricorder-1.asec
。只需在计算机上访问它并删除.android_secure
文件夹中的相应.asec
文件。
背景(为什么不在手机上这样做):
移动的应用程序位于一个加密循环挂载的容器文件中,存储在/mnt/sdcard/.android_asec/*
。然而,这并不可访问,因此普通应用程序无法处理已移动的应用程序(在/mnt/sdcard/.android_secure
上有一个tmpfs
挂载,大小为0KB,以阻止访问)。原始的.android_secure
被绑定挂载到/mnt/asec/secure
,系统可以访问容器。
以下是一个示例bash脚本,可以在启动容器A后启动容器B:
#!/bin/bash
# 启动容器A
docker run -d --name container_a your_image_a
# 等待容器A完全启动
while ! docker exec container_a echo "Container A is ready"; do
sleep 1
done
# 启动容器B
docker run -d --name container_b your_image_b
在这个示例中,我们首先使用docker run
命令启动容器A,并将其命名为container_a
。然后,使用一个循环来等待容器A完全启动(这里是通过在容器内运行echo
命令来测试)。一旦容器A就绪,我们再使用docker run
命令启动容器B,并将其命名为container_b
。
方案2
当我有一个容易快速填满空间的N1时,我曾经使用一个叫做ModInstallLocation的应用程序,来移动一些不能通过Apps2SD移动的应用程序。
As it turns out ModInstallLocation didn’t help, app was still installed on the phone. Apps2SD opens the standard Android app info page that has the “Move to SD” button which fails with “Couldn’t move app”.