Android 8.0 odex预编译与空间占用相关设置探究
1.引言
所谓Odex,是由android软件中的classes.dex生成的,Odex化即是把那个文件预先提取出来作用是能加快软件加载速度和开机速度。不过Odex也有缺点,那就是有时候加刷东西会出现问题。
简单说,原本系统恢复出厂设置后第一次开机需要先提取classes.dex出来,而Odex化就是现在你提前把它提取出来了。系统启动或者程序运行加快的原因也就在此。并且将dex变为odex还可以节省空间,因为提取后可以把apk内的dex删除。如果不odex,那么系统还是会自动提取dex,这时不仅apk内有dex,/data/dalvik-cache目录下也有dex,虽然apk内的dex经过压缩了,但是两份dex的总体积已经大于一份odex的体积了。
从以上介绍可以看出,odex是谷歌提供的增加安卓运行速度,降低总空间占用的优化方式,其主要优劣可总结为下:
优点:
- 大幅度缩减系统升级/系统重装/恢复出厂设置后第一次开机时间。
- 少量缩减每次开机时花费的时间。
- 少量减小总占用空间。
缺点
- 增加系统升级包/ROM包的大小。
- 无法直接更新odex化后的应用。
虽然odex能在整体上降低系统空间占用,但是却增加了system分区的占用,也增加了系统升级包的大小。 当要在小存储空间设备(8G/16G)上执行内置应用全odex化时,会对system分区造成不小的压力。
在安卓设备开启adb和usb调试后,可以通过计算机连接该设备,并使用df命令查看当前硬盘空间占用(当然直接在手机的终端软件里输入df也是可以的):
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 965176 512 964664 1% /dev
tmpfs 965176 0 965176 0% /mnt
/dev/block/dm-0 1999708 1828360 154964 93% /system
……
可以看到在小存储设备中,若安装了过多系统应用,并且开启odex话后,system分区将十分吃紧。
针对这一问题,可以简单想到以下几种解决方案:
1.移除部分系统内置应用,直接删除或者作为第三方应用使用。
2.调整system分区大小,给system分配更多空间。
3.根据情况,将system分区中的部分数据内容移动到其他分区。
4.将系统可以分为A/B两个分区,既减小了升级包的大小,又提升了第一次开机速度。
5.关闭或优化odex预编译
一般来说ÿ