Android 基础库 - 插件框架 - 存储优化

本文详细介绍了插件化框架的设计与实现,包括需求定义、基本原理、插件管理和集成方式等核心内容。特别关注了解压内置so、使用系统预置so和odex的优化策略,以及多应用共享插件的解决方案。

往期参考:

  1. 需求定义
  2. 基本原理
  3. 插件实现
  4. 资源覆盖
  5. 插件管理

插件框架代码已经开源,欢迎使用并反馈。https://github.com/cmguo/android-plugins

 

优化项目

集成方式

Android版本

说明

多应用共享

系统插件

 

包括:系统升级插件、 系统预置插件

皮肤覆盖不共享

不解压内置so

 

6.0及以上

ZipAlign

使用系统预置so

系统预置插件

5.0以下

5.0及以上

预置目录结构不同

文件时间相同

兼容/system/app目录

不存在APK内置so

使用系统预置odex

系统预置插件

5.0以下

5.0及以上

预置目录结构不同

删除多余缓存项目

 

 

 

 

 

多应用共享

对于系统预置的插件(/system分区),被多个应用加载时,每个应用会在各自的cache目录下加压出该插件的dex、so文件。

为此,针对系统预置插件,比如/system/xxx/Yyy.apk,规定解压的cache目录为/data/xxx/<package>/,这样多个应用可以共享。

因为dex优化、解压so库,已经有跨进程同步机制,所以多应用不会冲突。

 

 

不解压内置so

从Android 6.0开始,底层加载so 支持直接加载(映射)zip文件中的so,但是so库在zip中需要用特殊方式存储:

  • 不压缩(纯STORE模式)
  • 页面(磁盘块)对齐

目前基于Android 6.0源代码的编译是已经满足上述条件。

能够节省压缩后的so大小的空间(一般50%)。

 

 

使用系统预置so

系统预置应用一般so另外保存,预置插件也可以采用此方式保存,具体保存目录如下:

  • Android 5.0 之前,所有so保存在/system/lib目录
  • Android 5.0开始,各个插件的so分别保存在自己的目录下面,比如/system/ <plugins>/<plugin>/lib/arm(64)下面
  • 为了兼容错误的配置,也搜索/system/app/<plugin>/lib/arm(64)

在DexClassLoader的libPath增加系统预置目录(在后面)。在搜索so时,如果能够找到,并且与插件apk文件时间一致,就使用预置的so。

已经在apk中内置so,不使用系统预置so。

 

 

使用系统预置odex

系统预置应用有时候会做预先代码优化,odex保存在system分区。预置插件也可以采用此方式,具体保存位置:

  • Android 5.0 之前,保存在/system/<plugins>/<plugin>.odex
  • Android 5.0开始,各个插件的odex分别保存在自己的目录下面,比如:/system/ <plugins>/<plugin>/oat/arm(64)/<plugin>.odex
  • 为了兼容错误的配置,也检查/system/app/<plugin>/oat/arm(64)/plugin.odex

在DexClassLoader设置优化文件位置为上述位置,前提要检查文件时间是否与插件apk一致。

 

 

删除多余缓存项目

项目

条件

说明

插件缓存目录

对应插件不再存在

系统插件和应用插件不同的缓存目录

与具体是否加载无关

应用内置插件副本

对应应用内置插件不再存在

 

插件SO副本

插件不再包含对应SO

改为不解压SO方式,也删除

插件配置文件副本

插件不再包含对应配置文件

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值