0
点赞
收藏
分享

微信扫一扫

Android系统开发之一次系统分区空间优化

Android系统开发之一次系统分区空间优化_系统分区空间优化


需求描述:

研发老大(老A)过来对我说,小明现在有一个任务需要你们系统组研究处理一下:
现在有一个多UI桌面,大概占用空间100M,还有一个Canbus全套插件,大概占用空间200M。因为海外版本集成了google的gms包空间不够,现在需要你研究处理一下,看看如何优化一个系统分区,将这二个大块头内置进去。

需求初步分析:

看老大的要求,这应该就是一个系统分区空间优化的问题,一般主要是几个手段:
(1)排查无用,冗余,可以删除的数据,将其删除。
(2)排查可以瘦身压缩减少的数据
(3)排查是否可以减少,但是有负作用的数据(比如以时间换空间的应用dex文件)
(4)调整数据在分区的位置

初探敌情:

我查看了一个当前设备集成google的gms包的空间信息:

Android系统开发之一次系统分区空间优化_系统分区空间优化_02


system分区可用空间仅有可怜的5.9M,vendor分区还有可用空间339M。
但是多UI桌面,Canbus全套插件都是需要内置到system分区,也就是说我需要从system分区节省出300M的空间,这是一个非常有挑战的工作。

分区空间优化:

(1)排查无用,冗余,可以删除的数据

排查system分区所有的apk,特别是占用空间比较大的应用,发现有二个输入法:
/system/app/LatinImeGoogle/LatinImeGoogle.apk----54M 这是谷歌输入法应用
/system/app/LatinIME/LatinIME.apk----16M 这是安卓输入法应用

经过权衡,决定二者保留谷歌输入法应用,删除安卓输入法应用。
system分区节省16M(LatinIME.apk----16M )

事实上,还有其他的应用,如:
/system/app/GoogleTTS/GoogleTTS.apk----26M---文字转语音 不用可删
但是最终和领导讨论决定不删除,保留此应用。

(2)排查可以瘦身压缩减少的数据

这个主要是排查占用空间比较大的数据,如(apk,视频音频数据等等),下图是我排查system,vendor二个分区比较大且可以考虑瘦身压缩的数据:

Android系统开发之一次系统分区空间优化_系统分区空间优化_03


可以看到,上面数据可以分为二类:
一类是apk文件,第二类是mkv,wav视频和音频文件。
经过与领导讨论,第二类的视频和音频文件我们先保留不优化,优先优化第一类apk文件,那么这就转换为apk瘦身问题。
apk瘦身技术,网上已经是有许多成熟的技术和方案,在这我主要介绍一下此次作用比较大的关键技术:

apk瘦身关键技术:

  • 图片格式转换webp
    将app中的jpg,png格式图片转化为webp格式(这个可以直接在as中,选中图片,直接转换为webp),还可以考虑选择合适的压缩比:

Android系统开发之一次系统分区空间优化_系统分区空间优化_04


  • 图片压缩
    图片可以使用tinypng压缩,tinypng压缩图片可以做到UI显示效果肉眼看不出来损耗,但是图片大小得到非常高效的压缩。
    此tinypng支持单张图片压缩,也支持批量图片压缩,这个批量图片压缩处理需要你自己注册key,使用脚本来完成。

https://tinypng.com/

Android系统开发之一次系统分区空间优化_系统分区空间优化_05


使用上面的apk瘦身技术,我们得到对多UI桌面应用和Canbus全套插件的优化瘦身数据如下:
多UI桌面应用:
优化瘦身前:
system\priv-app\Launcher\Launcher.apk ---74M
多UI桌面应用配置图片 ---10M
优化瘦身后:
system\priv-app\Launcher\Launcher.apk ---53M
多UI桌面应用配置图片 ---3.6M
多UI桌面应用节省空间为27M。

Canbus全套插件:
优化瘦身前:
system\media\CanBus ---180M
优化瘦身后:
system\media\CanBus ---166M
Canbus全套插件节省空间为14M。

其他应用的瘦身效果为:

Android系统开发之一次系统分区空间优化_系统分区空间优化_06


最终,apk节省空间有110M。

(3)排查是否可以减少,但是有负作用的数据(比如以时间换空间的应用dex文件)

以上二步,节省的空间数为126M(LatinIME.apk----16M + apk节省空间有110M),而现在需要内置多UI桌面应用和Canbus全套插件空间为223M( 53M launcher.apk + 3.6M 多UI桌面应用配置图片+ Canbus 166M)。还是有97M的空间不足。
这我们就关闭apk的dex文件,来达到节省设备的空间,但是这会延长第一次刷机后设备的开机时间,这个就是以开机时间换设备空间的方案。因为有这个负面的影响,所以需要我们权衡空间和速度取舍。
我们尝试关闭几个大的应用的vdex文件,来节省空间85M:
Maps.vdex----35M Phonesky.vdex----27M OobConfig.vdex----12M LatinImeGoogle.vdex---11M

(4)调整数据在分区的位置

通过上面三步处理,我们现在system分区还缺少12M空间,但是我们vendor分区可用空间有339M,空间是比较宽裕的。那我们可以将部分数据(如apk)调整到vendor分区,就可以达到目的。
事实上,我这调整system分区的chrome(chrome.apk --64M)等应用到vendor分区,就可以达到目的。

优化结果:

通过上面的优化,我们将多UI桌面应用和Canbus全套插件内置到设备后,最终得到设备的分区信息为:
system分区可用空间为98M,vendor分区可用空间为264M。

Android系统开发之一次系统分区空间优化_系统分区空间优化_07


相关资料:

1.打开关闭dex

mk文件

关闭dex:
LOCAL_DEX_PREOPT:= false
打开dex:
LOCAL_DEX_PREOPT:= true


2.调试dex文件对开机速度的影响

2.1我们需要打开相关的调试日志信息:

frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java
public static final boolean DEBUG_DEXOPT = true;


2.2 分析对应的日志:

I PackageManager: Updating app 105 of 113: com.android.exchange
I dex2oat : dex2oat took 1.655s (3.451s cpu) (threads: 4) arena alloc=17KB (17816B) java alloc=2002KB (2050776B) native alloc=3MB (3863616B) free=1858KB (1903552B)

举报

相关推荐

0 条评论