android应用动态补丁实现新思路

本文提出了一种在应用启动初期利用native层修正classes.dex中的需要修改项来完成补丁工作的创新思路,实现了动态修改,虽然改动难度大,但补丁能力强大,代码改动行数不多,值得考虑。

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

常见补丁方案有:

1,对可能变化的类定义出接口,采用java反射技术,动态加载补丁包,完成实例化,但如果补丁实现和host存在交叉依赖,则会因为类名重名导致jvm报错,安全的需要,对模块解耦设计要求很高,使用范围有限

2,自定义新的classloader替代context里面原有的classloader,对发生变化的类使用新创建的classloader,此方案一般仅对未加载的activity对象有效,同时也存在方案一的弊端,使用范围受限

3,使用native实现替代原有class里的方法,修改难度高,可移植能力差


在此,我给出一种新思路,仅供参考:

对需要修改的内容放入自定义的补丁文件中,在应用启动初期,在native层,通过jvm对象定位到应用的classes.dex对应的DexFile对象,修正其中需要修改的项,则完成补丁工作。对已加载类,需要把jvm里的对应的类缓存清空,则会自动从DexFile里重新读取,实现动态修改。 此改动难度大,但理论上补丁能力是最强,代码改动行其实不大,值得采用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值