含义:可以简单理解为将一个app分为多个小的app,其中有一个为宿主app。

解决的主要问题:代码加载、资源加载。

插件的方式:apk安装,apk不安装,dex包

插件化的优点:

  1) 模块解耦,应用程序扩展性强

  2) 解除单个dex函数不能超过 65535的限制

  3) 动态升级,下载更新节省流量

  4) 高效开发(编译速度更快)

插件化的缺点:

  1) 增加了主应用程序的逻辑难度

  2) 技术有难度,目前一些成熟的框架都是闭源的

插件化开发—动态加载技术加载已安装和未安装的apk

动态加载技术就是使用类加载器加载相应的apk、dex、jar(必须含有dex文件),再通过反射获得该apk、dex、jar内部的资源(class、图片、color等等)进而供宿主app使用。

代码加载:

类的加载可以使用Java的ClassLoader机制,还需要组件生命周期管理。

资源加载:

用AssetManager的隐藏方法addAssetPath。

插件化必备基础:

ClassLoader类加载器

要想实现加载外部dex文件(即插件)来实现热部署,那么必然要把其中的class文件加载到内存中。

其中涉及到两种ClassLoader:DexClassLoader和PathClassLoader。而DexClassLoader可以加载外部的jar,dex等文件,正是我们需要的。

Java反射

因为插件apk与宿主apk不在一个apk内,那么一些类的访问必然要通过反射进行获取。所以了解反射对插件化的学习是必须的。

插件资源访问

res里的每一个资源都会在R.java里生成一个对应的Integer类型的id,APP启动时会先把R.java注册到当前的上下文环境,我们在代码里以R文件的方式使用资源时正是通过使用这些id访问res资源,然而插件的R.java并没有注册到当前的上下文环境,所以插件的res资源也就无法通过id使用了。

查看源码,通过“addAssetPath”方法重新生成一个新的Resource对象来保存插件中的资源,避免冲突。

代理模式

插件化实现的过程主要靠欺上瞒下,坑蒙拐骗来实现。想想虽然加载进来了Activity等组件,但也仅仅是最为一个对象而存在,并没有在AndroidManifest中注册,没有生命周期的回调,并不能实现我们想要的效果。因此无论是dynamic_load_apk通过代理activity来操控插件activity的方式,还是DroidPlugin通过hook activity启动过程来启动插件activity的方式,都是对代理模式的应用。

转载于:https://www.cnblogs.com/yl-saber/p/7346185.html

Android插件化初识相关推荐

  1. Android 插件化原理学习 —— Hook 机制之动态代理

    前言 为了实现 App 的快速迭代更新,基于 H5 Hybrid 的解决方案有很多,由于 webview 本身的性能问题,也随之出现了很多基于 JS 引擎实现的原生渲染的方案,例如 React Nat ...

  2. Android插件化技术调研

    一.技术背景 Android的插件化技术,目前已经比较成熟,微信.淘宝.携程.360手机助手中都应用到了插件化.插件化技术的特点是无需单独安装apk,即可运行,即插即用,无需升级宿主应用,减少app的 ...

  3. android 禁止插件化,Android 插件化实现方式(Hook)

    一.首先我们要找到Hook的点 1. 分析 我们先大概看下activity的启动流程(图片来自Android 插件化开发指南) image 当我们调用startActivity的时候,AMS对我们要启 ...

  4. 【Android 插件化】现有的针对插件化恶意应用的解决方案 | 插件化应用开发推荐方案

    文章目录 一.SafetyNet Attestation API 二.PluginKiller 三.针对插件化应用开发者 一.SafetyNet Attestation API SafetyNet A ...

  5. 【Android 插件化】恶意软件判定规则 | 恶意软件的范围定义

    文章目录 一.恶意软件判定规则 二.恶意软件的范围定义 一.恶意软件判定规则 在 [Android 插件化]基于插件化的恶意软件的加载策略分析 ( 自定义路径加载插件 | 系统路径加载插件 | 用户同 ...

  6. 【Android 插件化】基于插件化引擎的“恶意应用“与“良性应用“区别 | 恶意插件化应用特征

    文章目录 一.基于插件化引擎 的 恶意应用 与 良性应用 区别 二.恶意插件化应用特征 一.基于插件化引擎 的 恶意应用 与 良性应用 区别 在 [Android 插件化]VAHunt 引入 | VA ...

  7. 【Android 插件化】VAHunt 引入 | VAHunt 原理 | VAHunt 识别插件化引擎

    文章目录 一.VAHunt 引入 二.VAHunt 原理 三.识别插件化引擎 一.VAHunt 引入 从应用开发者角度出发 , 保护自己开发的应用不被恶意开发者使用插件化虚拟引擎二次打包 , 并植入恶 ...

  8. 【Android 插件化】多开原理 | 使用插件化技术的恶意应用 | 插件化的其它风险 | 应用开发推荐方案

    文章目录 一.多开原理 二.使用插件化技术的恶意应用 三.插件化的其它风险 四.应用开发推荐方案 一.多开原理 插件化的优点就是可以实现应用的多开 , 利用该多开虚拟化引擎 , 用户可以同时登录多个 ...

  9. 【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )

    文章目录 前言 一.应用开发者规避 APK 安装包被作为插件 二.检测插件化环境 1.检查 AndroidManifest.xml 清单文件 2.检查 运行时 信息 3.检查生成的目录 4.检查组件 ...

最新文章

  1. Visual Studio 15.7预览版4改进Git、C++支持
  2. 不用栈的直接二叉树遍历-morris travalsal
  3. 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 绑定数据到ListBox
  4. ubuntu 12.04下 eclipse的安装
  5. [导入]较为周全的Asp.net提交验证方案 (下)
  6. error: undefined reference to `_imp__glXXX@XX'
  7. 面试精讲之面试考点及大厂真题 - 分布式专栏 03 阿里华为资深HR面试套路全揭晓
  8. java cat_java应用监控之CAT简介
  9. html5的ajax上传图片,html5标准Ajax上传图片
  10. vive手柄按键开发说明
  11. U盘怎么写保护、去保护?
  12. maccms10自动播放下一集
  13. 最新网上赚钱方法,这四种最靠谱!
  14. java 分页导入_Java 插入分页符和分节符到Word文档
  15. 【无标题】单分子纳米孔测序技术及其应用研究进展
  16. Cross the Wall UVALive - 5097 (贪心+斜率dp)
  17. 【matlab小笔记】
  18. Flutter开发之——Icon图标
  19. mesothelioma-弥漫性间皮瘤
  20. 华为MateBook D加装硬盘和内存

热门文章

  1. Faster Read: Deep High Dynamic Range Imaging with Large Foreground Motions
  2. Unity中获取一个物体下所有的子物体的方法
  3. 青龙面板-花花阅读6.25 最新修复版
  4. 把kali linux 装进 U盘并实现数据可存储
  5. 我打不了字计算机应用怎么办,键盘正常为什么打不了字 电脑键盘失灵怎么解决...
  6. 《科研伦理与学术规范》 期末考试,题目文档汇总(免费分享 )
  7. GeForce RTX 3090深度学习测评
  8. AD18添加LOGO图标更改大小
  9. 如何自动注册推特推广号,推特注册的具体步骤
  10. 连接Wifi时自动弹出登录页面是如何做到的?