作者:Victoria625_176 | 来源:互联网 | 2023-09-12 10:33
讨论这个问题之前,不得不吐槽一下CSDN博客的文章编辑功能简直弱爆了!!就不能升级一下么。。
关于安卓手机的虚拟内存设置问题,现如今的新机内存过剩,已经完全不用考虑这个问题了,本文的主要对象还是老机子、山寨机或者国产小内存机型。由于这类机型RAM较小(通常在256M以下),且经系统占用后剩余不过50M左右的运行空间,可谓是捉襟见肘,更不用说现在的APP都是吃RAM老虎,如此一来,通过设置虚拟内存来提高运行速度与运行成功率的需求就产生了。
本文介绍3种设置虚拟内存的方法,在安卓系统上亲测成功,特别是在山寨机(无牌;测试发现S-ON,未OFF;通过ADB才能进fastboot;系统:android 2.3.6;内置储存空间(ROM):180;RAM:198M;系统占用后剩余RAM:50M)的测试上也成功,说明了该方法的通用性。
注明:所有方法均需要ROOT,所有涉及到的APP也都要赋ROOT权限。(山寨机找不到专用ROOT的可以通过360手机助手或其它软件的通用ROOT)
方法一:虚拟内存(1.0)(下载地址)
该方法最简单,效果也相对较差,不能开机自启,适合不想折腾的用户。
原理是在SD卡中创建swap文件,用于缓存交换。所以受限于SD卡速度,但对SD卡伤害其实不大(网上其它贴最喜欢说这样很烧SD卡,其实并没有想象中可怕)。
操作十分简单,按照APP提示两键搞掂。问题也明显,除了不能开机自启比较麻烦,另外,如果设置的虚拟内存值太小,会导致虚拟内存被填满后系统死机。
方法二:Swapper2。
这是网上最流行的方法,与方法一不同的是,Swapper2可以通过在SD卡上建立SWAP分区(linux的一种分区格式)的方式使用虚拟内存,效率会比单纯在SD上建立SWAP文件高,BUG较方法一少,但是分区步骤繁琐,不易成功。
既然说了这个APP,就有必要顺带提一下在安卓市场可以下载到的另一个虚拟内存APP:虚拟内存(VMHEAP)2.2(下载地址),这个APP需要S-OFF,原理与Swapper2一样,不方便、不解释、不多说。
方法三:在手机内置储存空间中建立swap文件。
该方法的优点显而易见,建立在内置储存中就是快!但是受限于旧手机的内置储存剩余空间本来就小,所以swap文件一般只能设置30-40M左右,效果一般,但是比没有好。
需要工具:1、swap脚本;2、RE管理器(2.3.6可用);3、超级终端(也可以联机用ADB代替);4、busybox(建议山寨机用户先装busybox)工具集下载地址
操作方法:
1、安装busybox,安装apk后还要点击APP图标运行安装一次;
2、设置虚拟内存开机自启:
(说明:如果不想开机启动则可以跳过这步,将这个步骤提前是因为老机子建立虚拟内存文件后可能内置空间已经不足,此时安卓系统会阻止任何APP安装进内置空间,因此会影响autostart.apk的安装。)
(说明2:如果系统已经提示“空间不足”,可以通过安卓超级终端的命令安装,需要先用RE将autostart.apk拷贝到系统根目录下。)
超级终端中安装apk的命令如下:
$ su //获取su权限
# cp autostart.apk /data/app //安装根目录下的autostart.apk
正常设置虚拟内存开机自启步骤:
安装autostart.apk至手机内存(下次开机时赋ROOT权限,要注意及时点击“允许”,否则就再重启一次)。用RE管理器在手机/DATA目录下创建opt文件夹,将autostart.sh复制进去,并增加可读+可执行的权限。
autostart.sh的脚本如下:
losetup /dev/block/loop7 /data/swapfile.img; //虚拟循环设备为区块设备
mkswap /dev/block/loop7; //设置swap交换区
swapon /dev/block/loop7; //开启交换区
注:本文与网上其它相同原理教程最大不同之处就在于autostart.apk的代码,省略了没有用、而且会导致开机自启不稳定的一段代码(mount -o remount,rw /data;)即重新映射/data为可读写目录的代码。 2、用RE管理器将swap建立脚本:buildswap.sh拷贝到手机内置/SYSTEM目录下,并用RE增加这个文件的“可执行”权限;
3、在RE中执行buildswap.sh,用于在手机内置/DATA中映射一个可读写目录,并建立swap虚拟内存镜像文件swapfile.img;
buildswap.sh的脚本如下:
mount -o remount,rw /data;//映射可读写目录
swapoff /dev/block/loop7;//关闭系统交换分区
dd if=/dev/zero of=/data/swapfile.img bs=1024 count=32768;//拷贝一个块文件生成虚拟内存文件,目标是swapfile.img,设置一次读入/输出块大小为1024kb,设置总大小为32768kb(可以随时更改,更改后重新执行即可。如改为48M,即是:48*1024=49152,count=49152)
free;//显示当前系统内存使用情况
4、此时如果要开启虚拟内存测试效果,可以直接执行autostart.sh,不影响开机自启。
5、想查看效果可以运行超级终端,输入free回车(查看内存使用情况),如swap一栏不全为0,则说明虚拟内存设置成功。如果全为0,则重新执行步骤3-4。若依旧为0则可能手机ROM不支持虚拟内存(从目前的测试看,尚未遇到这种情况)。
$ free//查看内存使用情况
6、重启手机(记得开机时给autostart.apk赋ROOT权限)后执行步骤5,检查是否设置成功。(方法一中的虚拟内存APP也可以代替超级终端free命令,作为查看手机当前SWAP状态的工具使用)[END]
综合三种方法:方法一简单,速度虽然不佳,但不受内置空间限制,可以最大设置到256M,持久性好;方法二繁琐,不推荐,只作为一种不同的技术在本文中说明;方法三简单易行,速度快,唯一的缺点是虚拟内存大小受限于本身就是宽裕的老手机内置储存空间,虚拟内存效果会伴随开机时间而变差,达不到非常好的效果。
======================================================我是分隔线=================================================================
经过一段时间的测试,更新一下本文的结论:
方法一最大的不便就是开机不能自启,太麻烦,依然不推荐;
方法二(Swapper2),关键在于在SD卡中格式化出一个Linux swap分区,如果想要把APP都装进SD卡,也可以再格一个EXT3分区,则装APP的时候需要使用SD LINK这个软件。(APP装在EXT3分区中并没有速度上的明显提升)
方法二可以实现自启,效果和方法一一致,唯一的问题是长时间使用(中间不重启手机)后,驻swap分区中的APP会出现异常,需求手动重启手机或APP。
方法三受限于机身内置空间太小,发挥不出应有的效果,反而达不到最初的需求,经过测试,最终不推荐该方法,推荐方法二。