安卓如何将应用程序移动到SD卡

14

实际上我想知道当我们将应用程序移动到SD卡时涉及哪些项目? 我试图搜索,但所有答案都指向“如何将应用程序移动到SD卡”,但实际上我只想知道哪些项目被移动到SD卡,还有哪些项目留在原地。 当我将应用程序移动到SD卡时,我可以看到仍然有一些内部存储器剩余。 我只是好奇还剩下什么东西? 应用程序实际上移动到哪里了(SD卡的哪个部分)?

1个回答

19

好问题!

让我用一个例子来解释一下,假设有一个名为“com.example.app”的包。

现在,当首次安装应用程序时,将创建一个名为

/data/com.example.app

其中包含所有应用程序的私有数据。

类似地,APK 本身包含在

/data/app/com.example.app-1.apk

现在,当我们将应用程序移动到外部存储器时,将会发生以下情况。

  • 它不会被移动到 /mnt/sdcard/ 分区中
  • Android 将在 /mnt/asec 分区下创建一个名为 /mnt/asec/com.example.app 的新文件夹。您可以使用任何文件管理器应用程序访问此路径,因为它具有 rw 权限
  • 如果有,则会复制 libs 目录并将所有文件、数据库移动到此处。
  • 还将从 "/data/app/com.example.app-1.apk" 复制 APK 到 /mnt/asec/com.example.app/com.example.app-1.apk

通过这种方式,可以节省 /data 分区空间,并可重复使用其他应用程序。当手机内部存储空间不足以容纳应用时,这是一个很好的技巧将应用程序移动到外部存储。


非常感谢您详细的回答。我不明白如果在/mnt/asec中创建分区,它仍然使用内部存储器,对吗?它甚至没有进入/mnt/sdcard,为什么?从您的回答中,似乎所有项目都已移出,实际上还剩下什么在内部存储器中?因为我们仍然可以看到一些千字节(多或少)的数据仍然保留在内部存储器中。 - Sam YC
2
Android将其存储分成许多子分区。尝试使用adb观察/proc/partitions。因此,/data和/mnt位于单独的分区中。因此,/mnt/asec不是内部存储器。其次,为什么它不进入/mnt/sdcard/是Android的设计选择。如果Android OS希望,它也可以很好地进入那里。移动后在内部存储器中看到少量数据,因为库和缓存被留下,还有一个“移动到内部存储器”的选项。因此,当需要将东西移回时,它是一个占位符 :) - Royston Pinto
1
只需输入“mount”即可查看所有已挂载的分区:/mnt/asec被挂载到tmpfs上,而tmpfs又被挂载到/mnt/sdcard/.android_secure上-参见:https://dev59.com/7mEh5IYBdhLWcg3wVCAb和http://android.stackexchange.com/questions/25439/app-cant-be-moved-to-sd-card。 - Peter Teoh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接