其实也只是将程序里的.apk文件移动到sd卡上,其它的文件还在data文件夹下。
将应用程序安装在SD卡上是Android 2.2(code name Froyo)新增的功能。应用程序转移到SD卡,可以很大程度地避免/data空间不足的状况。因为用户所安装的应用程序都是安装在/data分区下的(我的HTC Wildfire /data分区是175MB),随着应用程序的数量逐渐增加,/data分区的空间势必逐渐减小,那么何不好好利用有着更大空间的SD卡呢,要知道,现在的SD卡4GB,8GB,甚至16GB都已经很普遍了。在Android 2.2上,这个功能被加入进来了。这个功能的实现很简单,但同时也有些地方需要注意一下。
这里先介绍如何将已安装的应用程序转移到SD卡:
1. 在home页,按下menu键,然后选择”设置”,并依次进入”应用程序 –> 管理应用程序”,这时你会看到以下画面。其中第一栏的”已下载”里包含着所有由用户所安装的应用程序。
2. 点击”已下载”里的应用程序,如果该应用程序允许被移动到SD卡,会有一个白色可点击的”移至SD卡”按钮,点击这个按钮,系统就会将该应用程序移动到SD卡了。
3. 返回到”管理应用程序”界面,点击最右侧的一栏”SD卡中”,可以看到所有被移动到SD卡的应用程序。
以下是需要注意和了解的地方:
1. 应用程序的默认安装位置是在开发过程中在manifest的”android:installLocation”里声明的,它的值可以是"preferExternal" 和"auto"。如果选择"preferExternal",那么应用程序默认会被安装在SD卡(但如果SD卡空间不足,那么应用程序仍将被安装在ROM中),如果是”auto”,则会由系统自动判断应用程序安装的位置。
2. 根据Android开发文档,应用程序被移动到SD卡后,应用程序的性能并不会有什么影响。但是我的疑问是:系统下的分区文件系统(一般是yaffs,yaffs2)和SD上的分区文件系统(一般是FAT32)不同,这一点也不会影响性能吗?
3. 并不是这个应用程序的所有文件都被转移到SD卡了,而是只有.apk文件被转移到SD卡,而其他的.dex,数据库等一些文件仍然会留在/data分区。
4. 转移到SD卡的应用程序只能在一个Android设备上使用,而不能拿到其他设备上使用。
5. 当用户通过USB数据线将Android设备与电脑连接起来,并且USB连接方式是”磁盘驱动器” 时,运行在SD卡上的应用程序会被立马结束。
6. 不是所有的应用程序都应当安装在SD卡上,比如输入法,动态桌面等等,详细情况请参考引文。
这里以estrong taskmanager为例来研究Android下App安装的位置以及App移动到SD卡的情况。
研究方法:
1. 在App安装前,安装后,移动后,分别使用adb shell ls -R <path> > <file>将对应路径下的所有文件保存下来,这里的path是/data和/mnt;
2. 通过文件比对工具(Linux下用Meld,Windows下WinMerge)对这些文件进行比对,以查看前后的差异。
以下是实验结果:
App安装后的变化
/data目录下多出文件如下:
/data/app/com.estrongs.android.taskmanager-1.apk
/data/data/com.estrongs.android.taskmanager/cache/
/data/data/com.estrongs.android.taskmanager/cache/webviewCache/
/data/data/com.estrongs.android.taskmanager/databases/
/data/data/com.estrongs.android.taskmanager/databases/webviewCache.db-journal
/data/data/com.estrongs.android.taskmanager/databases/etm_info.db
/data/data/com.estrongs.android.taskmanager/databases/webviewCache.db
/data/data/com.estrongs.android.taskmanager/databases/webview.db
/data/data/com.estrongs.android.taskmanager/shared_prefs/
/data/data/com.estrongs.android.taskmanager/shared_prefs/google_ads.xml.xml
/data/data/com.estrongs.android.taskmanager/shared_prefs/com.estrongs.android.taskmanager_preferences.xml
/data/data/com.estrongs.android.taskmanager/shared_prefs/ignore_list.xml
/data/data/com.estrongs.android.taskmanager/lib/
/data/dalvik-cache/data@app@com.estrongs.android.taskmanger-1.apk@classes.dex
另外,可能发生改变的文件有:
/data/data/com.htc.launcher/share_prefs/WidgetPackageManager.xml
App移动到SD card后的变化
/data目录减少的文件如下:
/data/app/com.estrongs.android.taskmanager-1.apk
/data目录发生变化的文件如下:
原/data/dalvik-cache/data@app@com.estrongs.android.taskmanger-1.apk@classes.dex
变成/data/dalvik-cache/mnt@asec@com.estrongs.android.taskmanger-1@pkg.apk@classes.dex
/data目录可能发生变化的文件如下:
/data/system/appwidgets.xml
/mnt目录多出的文件如下:
/mnt/asec/com.estrongs.android.taskmanager-1/
/mnt/asec/com.estrongs.android.taskmanager-1/pkg.apk
/mnt/secure/asec/com.estrongs.android.taskmanager-1.asec
android 存储到sd卡 安卓 app sd卡
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
APP数据存储到SD卡 android 应用数据存到sd卡
【Android】Android 移动应用数据到SD 在应用的menifest文件中指定就可以了,在 <manifest> 元素中包含android:installLocation 属性,设置其值为"internalOnly"即可,如下:<manifest xmlns:android="http://schemas.android.com/apk/
APP数据存储到SD卡 android Android SD AndroidManifest Storage