• Android插件化技术简介


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

  • 相关阅读:
    JS——祝愿墙
    JS——模拟百度搜索
    JS——选择水果
    html——快捷键
    JS——百度背景图
    JS——stye属性
    JS——高级各行换色
    html——细线表格
    LeetCode初级算法(数组)解答
    Python网络爬虫(四)
  • 原文地址:https://www.cnblogs.com/genggeng/p/9963407.html
Copyright © 2020-2023  润新知