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插件化技术简介的更多相关文章

  1. Android 插件化技术窥探

    在Android 插件化技术中(宿主app和插件app设置相同的sharedUserId),动态加载apk有两种方式: 一种是将资源主题包的apk安装到手机上再读取apk内的资源,这种方式的原理是将宿 ...

  2. Android插件化技术——原理篇

    <Android插件化技术——原理篇>     转载:https://mp.weixin.qq.com/s/Uwr6Rimc7Gpnq4wMFZSAag?utm_source=androi ...

  3. 深入理解Android插件化技术

    深入理解Android插件化技术  转 https://zhuanlan.zhihu.com/p/33017826 插件化技术可以说是Android高级工程师所必须具备的技能之一,从2012年插件化概 ...

  4. 包建强的培训课程(10):Android插件化从入门到精通

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  5. Android 插件化和热修复知识梳理

    概述 在Android开发中,插件化和热修复的话题越来越多的被大家提及,同时随着技术的迭代,各种框架的发展更新,插件化和热修复的框架似乎已经日趋成熟,许多开发者也把这两项技术运用到实际开发协作和正式的 ...

  6. 《Android插件化开发指南》面世

    本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...

  7. 自己动手写Android插件化框架,让老板对你刮目相看

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由达文西发表于云+社区专栏 最近在工作中接触到了Android插件内的开发,发现自己这种技术还缺乏最基本的了解,以至于在一些基本问题上浪 ...

  8. android插件化简述

    2015年是Android插件化技术突飞猛进的一年,随着业务的发展各大厂商都碰到了Android Native平台的瓶颈: 从技术上讲,业务逻辑的复杂导致代码量急剧膨胀,各大厂商陆续出到65535方法 ...

  9. 自己动手写Android插件化框架

    自己动手写Android插件化框架 转 http://www.imooc.com/article/details/id/252238   最近在工作中接触到了Android插件内的开发,发现自己这种技 ...

随机推荐

  1. Xshell使用笔记

    Xshell 使用笔记 1second即1s1millisecond即1ms1s=1000ms Xshell中输入冒号 : 表示终止当前命令的意思 SSH 是Secure Shell ,安全外壳协议的 ...

  2. JVM 虚拟机笔记

    GC算法 标记-清除算法复制算法标记-整理算法分代收集 新生代--[15次GC]-->老年代新生代:复制算法老年代: 标记-清除算法或标记-整理算法 GC策略采用的何种算法引用计数算法根搜索算法 ...

  3. Ubuntu vim下 实现函数跳转功能

    安装sudo apt-get install exuberant-ctags   在每次使用时,需要初始化tags,只有这样才能使用跳转功能 初始化: 进入项目的顶级目录.输入以下命令.        ...

  4. weblogic的基本概念

    1.Domain,Administration Server, Managed Server 域包含一个或多个 WebLogic Server 实例. Domain 中包含一个特殊的 WebLogic ...

  5. 细说shiro之七:缓存

    官网:https://shiro.apache.org/ 一. 概述 Shiro作为一个开源的权限框架,其组件化的设计思想使得开发者可以根据具体业务场景灵活地实现权限管理方案,权限粒度的控制非常方便. ...

  6. MyBatis SQL语句操作Mysql

    本文记录使用Mybatis操作数据库时碰到的一些语句,供以后参考. 一,多条件查询 示意SQL语句:SELECT t_field1, t_field2 FROM table_name WHERE t_ ...

  7. JS 数组中对象去重 reduce 用法

    对于数组对象,传统的去重方法无能为力,至于forEach().filter()等迭代方法也不好使:真正能做到优雅去重的,是ES5新增加的一个方法——reduce() 高手给的,完美方法 let log ...

  8. termios结构体各成员的值(FreeBSD 12.0)

    一.文件位置 /usr/include/sys/_termios.h 二.文件内容 /*- * SPDX-License-Identifier: BSD-3-Clause * * Copyright ...

  9. DUMP1 企业级电商项目

    系统:centos6 配置mirror阿里云 https://opsx.alibaba.com/mirror 远程管理首选:ssh 账户密码登录(ssh user@host) 或者 本地私钥连接服务器 ...

  10. Session 起航 登录会话和注销请求 重定向和转发

    [LoginServlet] @WebServlet(name="loginServlet",urlPatterns = "/login") public cl ...