Android 插件化框架

本文介绍了Android的两种插件化框架——Small和Atlas。Small通过创建APP.main模块,集成Small库,并在bundle.json中记录模块信息实现插件化。公共库被打包成SO文件以独立更新。而Atlas是阿里巴巴的插件化解决方案,其核心原理与Small类似,通过多层结构管理插件的类加载和资源动态加载。Atlas的类加载涉及DelegateClassloader和BundleClassloader,资源加载则通过delegateResource实现。文章详细阐述了两种框架的类加载、资源加载机制及bundle的生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Small

流程:创建app,集成small,宿主module中初始化small

strictSplitResources = false :是否严格执行资源分割

创建插件module名字为APP.main 包名为com.example.appmain

创建assets文件夹和bundle.json文件记录module信息,所有的插件都需要在bundle.json中添加uri和pkg信息

Small.setup进行跳转

创建一个公共库  库名lib.network   module名 lib.network 包名:com.example.libnetwork

公共库和普通库的区别:公共库呗打包成一个so文件可以独立更新。

定义公共库有两种方法:

1.指定module name 为 lib.***

2.在small DSL 中显示指出bundls lib ***


Atlas

阿里独立研发和开源的一种插件化技术方案,功能强大且复杂,使用于大型app

核心原理与samll相同,都是提供能够加载插件中的类,资源“动态加载”

Atlas的整体结构:

第一层:hack层,负责系统层面注入和hack工具初始化

第二层:bundle层,主要负责管理bundle的声明周期

第三层:runtime层,负责给bundle查找类和资源

第四层:对外接入层,处理插件的applicaiton和清单文件

Atlas的类加载机制:atlas中会创建两种classlaoder,第一个是DelegateClassloader作为一个类查找的路由存在,本身不负责真正的类加载。它被启动时会被atlas注入loaderApk中。替换原有的pathclassloader,第二个是bundleclasslaoder,每个bundle 在resolve的时候会分配一个bundleclassloader,负责该bundle的类加载(概括就是,delegateclassloader以bootclasslaoder为parent,而它本身又有类似于路由的功能,可以引用pathclassloader,从而找到所有的bundlerclasslaoder)

Atlas的资源加载机制:loadedApk中的资源会被替换成Atlas内部的delegateResource,在每个bundle的安装过程中,每个bundle的assetspath会被更新到delegateResource的AssetsMananger

Bundle的生命周期:

1.installed:bundle被安装到storage目录

2.Resolved:classloader被创建,assetspath注入delegateResource

3.Active:bundle通过了安全校验,bundle的dex检测已经成功dexopt,resouece已经成功注入

4.Started:bundle开始运行,调用applicaiton的oncreate方法

bundle的构建过程中,每个bundle会被独分区,packeld保证全局唯一。packgeid在host的构建工程内会有packageidFile.properties进行统一分配。

每个bundle都在清单文件中声明了自己的packagename,但是在aapt的过程中,arsc文件里所有的bundle的packagename均被统一为hostapk的packge,

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值