Android插件化初识
含义:可以简单理解为将一个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插件化初识相关推荐
- Android 插件化原理学习 —— Hook 机制之动态代理
前言 为了实现 App 的快速迭代更新,基于 H5 Hybrid 的解决方案有很多,由于 webview 本身的性能问题,也随之出现了很多基于 JS 引擎实现的原生渲染的方案,例如 React Nat ...
- Android插件化技术调研
一.技术背景 Android的插件化技术,目前已经比较成熟,微信.淘宝.携程.360手机助手中都应用到了插件化.插件化技术的特点是无需单独安装apk,即可运行,即插即用,无需升级宿主应用,减少app的 ...
- android 禁止插件化,Android 插件化实现方式(Hook)
一.首先我们要找到Hook的点 1. 分析 我们先大概看下activity的启动流程(图片来自Android 插件化开发指南) image 当我们调用startActivity的时候,AMS对我们要启 ...
- 【Android 插件化】现有的针对插件化恶意应用的解决方案 | 插件化应用开发推荐方案
文章目录 一.SafetyNet Attestation API 二.PluginKiller 三.针对插件化应用开发者 一.SafetyNet Attestation API SafetyNet A ...
- 【Android 插件化】恶意软件判定规则 | 恶意软件的范围定义
文章目录 一.恶意软件判定规则 二.恶意软件的范围定义 一.恶意软件判定规则 在 [Android 插件化]基于插件化的恶意软件的加载策略分析 ( 自定义路径加载插件 | 系统路径加载插件 | 用户同 ...
- 【Android 插件化】基于插件化引擎的“恶意应用“与“良性应用“区别 | 恶意插件化应用特征
文章目录 一.基于插件化引擎 的 恶意应用 与 良性应用 区别 二.恶意插件化应用特征 一.基于插件化引擎 的 恶意应用 与 良性应用 区别 在 [Android 插件化]VAHunt 引入 | VA ...
- 【Android 插件化】VAHunt 引入 | VAHunt 原理 | VAHunt 识别插件化引擎
文章目录 一.VAHunt 引入 二.VAHunt 原理 三.识别插件化引擎 一.VAHunt 引入 从应用开发者角度出发 , 保护自己开发的应用不被恶意开发者使用插件化虚拟引擎二次打包 , 并植入恶 ...
- 【Android 插件化】多开原理 | 使用插件化技术的恶意应用 | 插件化的其它风险 | 应用开发推荐方案
文章目录 一.多开原理 二.使用插件化技术的恶意应用 三.插件化的其它风险 四.应用开发推荐方案 一.多开原理 插件化的优点就是可以实现应用的多开 , 利用该多开虚拟化引擎 , 用户可以同时登录多个 ...
- 【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中 )
文章目录 前言 一.应用开发者规避 APK 安装包被作为插件 二.检测插件化环境 1.检查 AndroidManifest.xml 清单文件 2.检查 运行时 信息 3.检查生成的目录 4.检查组件 ...
最新文章
- Visual Studio 15.7预览版4改进Git、C++支持
- 不用栈的直接二叉树遍历-morris travalsal
- 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 绑定数据到ListBox
- ubuntu 12.04下 eclipse的安装
- [导入]较为周全的Asp.net提交验证方案 (下)
- error: undefined reference to `_imp__glXXX@XX'
- 面试精讲之面试考点及大厂真题 - 分布式专栏 03 阿里华为资深HR面试套路全揭晓
- java cat_java应用监控之CAT简介
- html5的ajax上传图片,html5标准Ajax上传图片
- vive手柄按键开发说明
- U盘怎么写保护、去保护?
- maccms10自动播放下一集
- 最新网上赚钱方法,这四种最靠谱!
- java 分页导入_Java 插入分页符和分节符到Word文档
- 【无标题】单分子纳米孔测序技术及其应用研究进展
- Cross the Wall UVALive - 5097 (贪心+斜率dp)
- 【matlab小笔记】
- Flutter开发之——Icon图标
- mesothelioma-弥漫性间皮瘤
- 华为MateBook D加装硬盘和内存
热门文章
- Faster Read: Deep High Dynamic Range Imaging with Large Foreground Motions
- Unity中获取一个物体下所有的子物体的方法
- 青龙面板-花花阅读6.25 最新修复版
- 把kali linux 装进 U盘并实现数据可存储
- 我打不了字计算机应用怎么办,键盘正常为什么打不了字 电脑键盘失灵怎么解决...
- 《科研伦理与学术规范》 期末考试,题目文档汇总(免费分享 )
- GeForce RTX 3090深度学习测评
- AD18添加LOGO图标更改大小
- 如何自动注册推特推广号,推特注册的具体步骤
- 连接Wifi时自动弹出登录页面是如何做到的?