我的HTC G16(chacha 810e)的/data对应的分区拥有150MB的空间。因为/system对应的分区有较大空间剩余,通常它为只读。为减少这些剩余空间造成的浪费,我 安装程序时都是在将其重新挂载为可写(sudo adb remount)之后直接push进去,这样就给/data分区节省了空间。但是,在没有多少程序缓存的情况下,手机仍经常提示内部存储空间不足,也不敢安装以MB计的apk程序。 为解决这一问题,调查了/data目录: sh-3.2# du /data -h -d 1 可 见,dalvik-cache占用了大部分空间,该目录为/system/app和/data/app的应用程序的缓存,减少Dalvik VM加载应用程序的时间。Android手机刷机后第一次开机,会花费很长时间才能进入界面,应该是遍历各应用程序生成这些缓存(没发现有权威文档也没有 查验代码故称之为“应该是”)。当程序安装又卸载后,程序在此目录中的缓存并未清除。久而久之,可用内部空间越来越小。可手工删除,应该也可Wipe Cache(在fast boot中),当然也可恢复出厂设置(记住要备份)。 但像我自己的例子,/data所挂载的分区已经做到最节省, 没有浪费,如何解决内部存储空间不足呢?其中一个方法/思路是:SDcard上创建两个ext3分区,比如大小1GB,另一个大小512MB,然后在 init.rc里挂载到/data/dalvik-cache和/data/data下,就应该可以解决这个问题。缺点是,该手机正常运行依赖于该SD 卡,摘掉卡后可能会出现些问题。因为根文件系统为只读,init.rc不可修改,所以又回归到最原始问题上。有src code的话进行编译后,直接使用工厂烧写工具烧写,方便简单。 另外一种方法/思路是为apk程序瘦身。在apk程序包下面的res/目录下,往 往存放了适配各种屏的图片文件,它们往往都很大,动辄好几个MB。我们可以将它们去除后再重新生成签名,然后再放入自己的手机中,相当于针对自己手机的定制。其实,在当前手机硬件如此之高,GPU大行其道的今天,完全可以多消耗一丁点硬件处理性能,去换取更多空间。只有在硬件处理性能比较弱时,才有必要提供各种大小的图片资源。
后记:在不能修改原始设备分区的情况下,我们可以维护设备,及时清除掉垃圾数据。如安装apk后,在卸载后,会在 /data/dalvik-cache/留下残留,占用与apk同样大小的/data分区空间,在获取root权限后,可以手动删除它们;在应用程序管理里,清除各程序的缓存数据。当然,清除它们最彻底的还是恢复出厂设置,但在这之前最好将手机上的数据如电话本同步到云端,恢复完再同步回来。 |
|