码迷,mamicode.com
首页 > 移动开发 > 详细

Android插件化技术简介

时间:2018-11-15 15:34:25      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:方法   跳过   应用层   target   tail   清单   杀器   href   代理   

技术分享图片

https://blog.csdn.net/io_field/article/details/79084630

可以通过反射 事先定义统一接口的方式,访问插件中的类和方法

还可以在AndroidManifest.xml中动态注册组件Activity、Service、BroadcastReceiver、ContentProvider(DroidPlugin实现) https://www.jianshu.com/p/e61a4d10e122

插件化的原理无非就是这些:

  1. 通过DexClassLoader加载。
  2. 代理模式添加生命周期(在代理Activity的生命周期函数中,调用插件中Activity实现的生命周期函数)。 https://www.jianshu.com/p/7b2cc534d097
  3. Hook思想跳过清单验证。https://www.jianshu.com/p/69bfbda302df---Hook技术之Activity的启动过程拦截

 

在2017年至今各大公司推出的插件化技术越来越成熟,发展到了顶峰,井喷了许多高质量的插件化框架,以应对大型App的开发。但是时不凑巧 2018年,Google官方祭出了大杀器 -- 禁止调用私有API(经过@hide修饰的方法),也意味着赖以生存的插件化技术走向了终结。

Hook技术绕开Android P 系统限制

Google为了不让开发者调用经@hide注解修饰的系统api,可谓下了非常大的功夫。不过上有政策,下有对策。经过360技术团队与动脑学院研发团队的联合攻克下,可以将app某个单独的类伪装成系统类。会让Android系统误认为是自己调用隐藏的API;大家都知道系统是可以调用隐藏的方法的。

这如何做到呢?

在类加载机制分析中,我们可以发现,系统的Class是被BootStrapClassLoader加载的,BootStrapClassLoader也称为系统类加载器 应用层经过反射调用系统的Api最终会调用BootStrapClassLoader的加载类的方法。

那我们能否将我们apk中定义的某个工具类的ClassLoader变成BootStrapClassLoader呢?如果能实现那该怎样才能使工具类能够正常调用经@hide注解修饰的系统api。  答案是肯定可以的!

Android插件化技术简介

标签:方法   跳过   应用层   target   tail   清单   杀器   href   代理   

原文地址:https://www.cnblogs.com/genggeng/p/9963407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!