Android 8.0 odex预编译与空间占用相关设置探究

本文探讨了Android 8.0中odex预编译对系统空间占用的影响,以及如何通过全局设置和APK设置来优化空间。介绍了WITH_DEXPREOPT等编译开关的作用,讨论了关闭预编译以节省系统分区空间的方法,同时指出可能带来的开机速度变慢的问题。最后,提出了通过修改dex_preopt_odex_install.mk文件进行批量设置的策略。

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预编译

一般来说,当空间足够大时,可采用2号方案;而当空间有限时,应采用1、3、4号方案针对实际情况进行调整;5号方案仅作为懒人方案后备使用。
本文针对5号方案进行探索。

2.odex全局设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值