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

常见补丁方案有:

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

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

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


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

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

你可能感兴趣的:(android应用动态补丁实现新思路)