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。  答案是肯定可以的!

最新文章

  1. sharepoint
  2. c#使用正则表达式抓取a标签的链接和innerhtml
  3. 登录框密码框input框禁止复制、粘贴、剪切和右键功能
  4. block反向界面传值
  5. Selenium自动化测试问题
  6. python——初识socket
  7. NGUI之UIRoot屏幕分辨率自适应
  8. Android 一键直接查看Sqlite数据库数据
  9. jQuery中的&& ||
  10. 解决安装SQL Server2008失败的问题
  11. Tomcat绑定多个IP地址 多域名绑定
  12. Qt入门(13)——Qt的调用退出
  13. Java之线程的控制
  14. xml文件sql中大于号、小于号、等号的转义问题
  15. Cause: dx.jar is missing
  16. 【学习总结】Git学习-参考廖雪峰老师教程四-时光机穿梭
  17. Redis设计与实现:读书笔记之二
  18. ABP+AdminLTE+Bootstrap Table权限管理系统第六节--abp控制器扩展及json封装以及6种处理时间格式化的方法
  19. activeMQ配置文件
  20. React Naive 解决防止多次点击的解决方法

热门文章

  1. 自定义数据类型 typedef
  2. maomao的每日动向
  3. 原生JS实现全选和不全选
  4. 2018年度最优秀mac软件及游戏推荐,个个万里挑一
  5. angular cli全局版本大于本地版本 把本地版本升级方式
  6. 面向对象【day08】:动态导入模块(八)
  7. CentOS7 图形化方式安装 Oracle 18c 单实例
  8. Linux记录-I/O系统监控
  9. 理解maven命令package、install、deploy的联系与区别
  10. 【不懂】spring bean生命周期