IntentFilter(); intentFilter.addAction("baobao2"); registerReceiver(myReceiver,intentFilter); ***动态广播的插件化解决方案...*** 使用前面介绍的dex合并技术,插件中的动态广播就可以被宿主App正常调用了 ***静态广播的插件化解决方案*** 1)PMS只能读取宿主App的AndroidManifest文件,读取其中的静态广播并注册...我们可以通过反射,手动控制PMS读取插件的AndroidManifest中声明的静态广播列表 2)遍历这个静态广播列表。...broadcastReceiver = (BroadcastReceiver) RefInvoke.createObject(receiverInfo.name); context.registerReceiver...broadcastReceiver = (BroadcastReceiver) RefInvoke.createObject(receiverInfo.name);
在Android组件化和插件化的过程中,经常会遇到狠多的问题,如常见的包依赖冲突,资源文件依赖冲突等问题,当然,在资源文件上面,一些组件化框架已为我们提供了一些资源文件冲突的解决方案。...1,资源冲突问题 在组件化项目中,经常会遇到多个Module模块的资源冲突问题。例如,一个简单的app包含app模块、user模块、me模块,其中app模块依赖user模块和me模块。... 2,多个Module依赖同一个jar的解决方案 在做插件化的过程中,有如下的一个场景:环信Module和我们自己的app的Module都要用到定位sdk,如果同时引入这两个sdk...解决方案:将任意一个Module中的jar依赖为compile files(‘your jar name’),其他需要依赖的地方改为provided files(‘your jar name’)并且删除
文章目录 一、SafetyNet Attestation API 二、PluginKiller 三、针对插件化应用开发者 一、SafetyNet Attestation API ---- SafetyNet...hook 调试环境中 , 这样进一步降低了软件被逆向的风险 ; SafetyNet 的 basicIntegrity 检测 , 可以检测出双实例应用程序 ( 多开应用 ) , 但是无法检测出不加载第三方插件的插件化应用...; 二、PluginKiller ---- 参考 【Android 插件化】使用 PluginKiller 帮助应用开发者规避发布的 APK 安装包被作为插件的风险 ( 验证应用是否运行在插件化引擎中...) 博客 , 引入 PluginKiller 库 , 即可检测当前应用是否运行在插件化环境中 ; 三、针对插件化应用开发者 ---- 凡是加载插件 , 都要弹出对话框 , 征求用户同意 , 如果用户不同意..., 一定不要加载插件 ; 不要静默加载插件 , 如在组件的声明周期函数中加载插件 , 极有可能被判定为恶意软件 ; 大部分的良性软件 , 使用插件化 , 是为了减少 APK 体积 , 以及快速进行插件更新迭代
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) 文章目录 Android 插件化系列文章目录 一、组件化与插件化 二、插件化示例 三、插件化标准引入...机制 , 动态部署其插件 apk ; 这类软件第一次打开时 , 需要下载该模块的 插件 apk , 并安装 , 此时会卡顿以下 , 之后可以流畅访问 ; 三、插件化标准引入 ---- 插件化 中 ,
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) 【Android 插件化】Hook 插件化框架 ( Hook 技术 | 代理模式 | 静态代理 | 动态代理...) 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程
框架简介 : https://www.infoq.cn/article/ctrip-android-dynamic-loading/
前言 四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三种实现方式,分别是反射实现、接口实现和Hook技术实现。...反射实现会对性能有所影响,主流的插件化框架没有采用此方式,关于接口实现可以阅读dynamic-load-apk的源码,这里不做介绍,目前Hook技术实现是主流,因此本篇文章主要介绍Hook技术实现。...在讲到这两个解决方案前,我们需要从整体上了解Activity的启动流程。...接着在步骤2之后用插件Activity替换占坑的Activity,接下来根据这个解决方案我们来实践一下。...更多的Android插件化原理请查看即将要出版的《Android进阶之光》续作。
文章目录 一、插件化技术弊端 二、恶意插件化程序的解决方向 三、常用的插件化虚拟引擎 一、插件化技术弊端 ---- 在之前的 Android 应用中 , 部分黑客将应用破解 , 植入自己的恶意代码 ,..., 使用自动化脚本 , 一晚上甚至可以封装数量巨大的恶意应用 ; 目前的 Android 生态中 , 存在着大量的该类使用插件化技术进行 ; 据统计 , 应用市场中 , 插件化应用中 , 恶意插件化应用...是 正常使用插件化技术应用的 数倍 ; 针对上述问题 , 需要使用一些技术识别 恶意 插件化应用 , 并删除此类应用 ; 二、恶意插件化程序的解决方向 ---- 首先 , 要先识别出使用了插件化技术的应用...; 插件化应用有相同的特点 : 使用了 插件化 技术 的应用 , 都有相同的特点 , 当前的插件化基本都是基于 Hook 的插件化技术 , 这样可以零侵入代码 , 开发的插件 APK 与普通 APK..., 一般不经过用户同意秘密加载插件 ( 感觉有些大厂的插件化也是偷摸加载的 , 插件化对用户透明 ) , 分析出恶意插件的非法加载插件的指纹特征 , 与正常使用插件化技术的应用进行区分 ; 检测恶意插件化应用
Instrumentation只给Activity提供服务 2.一般预先在宿主app中创建10个StubService占位就够了 ***startService的解决方案*** 首先把插件和宿主的dex...Object[] newElements = (Object[]) Array.newInstance(elementClass, dexElements.length + 1); // 构造插件...elements复制进去 System.arraycopy(dexElements, 0, newElements, 0, dexElements.length); // 插件的那个...return true; } private void handleCreateService(Message msg) { // 这里简单起见,直接取出插件...jianqiang.com.testservice1", "jianqiang.com.testservice1.MyService1")); stopService(intent); ***bindService的解决方案
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...| 插件包管理 ) 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “插件包“ 中的 Element[] dexElements ) 【Android 插件化】Hook 插件化框架...插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 ) 【Android 插件化】Hook 插件化框架 ( 插件包资源加载 ) ---- 文章目录 Android 插件化系列文章目录
1.宿主App加载插件中的类 2.最简单的插件化方案就是在宿主的androidmanifest.xml中申明插件中的四大组件 把插件dex合并到宿主dex中,那么宿主app对应的classloader...RefInvoke.setFieldObject(Handler.class, mH, "mCallback", new MockClass2(mH)); } } 动态替换Activity的插件化方案...字段,设置为插件的ClassLoader。...// 替换 RefInvoke.setFieldObject(pathListObj, "dexElements", newElements); } } 解决插件化...null; //系统原始的ClassLoader public static void init(Application application) { //初始化一些成员变量和加载已安装的插件
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) ---- 文章目录 Android 插件化系列文章目录 一、" 插件化 " 中的 dex 文件 二、类加载器分析...三、获取类加载器 四、双亲委派机制 一、" 插件化 " 中的 dex 文件 ---- 现在的大型 Android 项目 , 基本都是 组件化 + 插件化 开发 , 项目架构上都是 组件化 的框架 ,
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...) 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程...| 插件包管理 ) 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “插件包“ 中的 Element[] dexElements ) 【Android 插件化】Hook 插件化框架
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 ) 【Android 插件化】Hook 插件化框架 ( 插件包资源加载 ) 【Android 插件化】Hook 插件化框架 ( 从源码角度分析加载资源流程...| Hook 点选择 | 资源冲突解决方案 ) ---- 文章目录 Android 插件化系列文章目录 前言 一、从源码角度分析加载资源流程 1、ActivityThread 入口 2、LaunchActivityItem
Binder;数据量超过1M时,Binder就搞不定了,需要ContentProvider 2.ContentProvider就是一个数据库引擎,向外界提供了CRUD的API ContentProvider插件化...ContentProvider就要等很久了 /** * 一定需要Application,并且在attachBaseContext里面Hook * 因为provider的初始化非常早,比Application...ContentProvider /** * 为了使得插件的ContentProvder提供给外部使用,我们需要一个StubProvider做中转; * 如果外部程序需要使用插件系统中插件的ContentProvider...,不能直接查询原来的那个uri * 我们对uri做一些手脚,使得插件系统能识别这个uri; * * 这里的处理方式如下: * * 原始查询插件的URI应该为: * content://host_auth...这是ContentProvider独有的URI机制,而且是简单的字符串,所以很适合这种转发机制 --摘自《android插件化开发指南》
2.1 插件化分类 插件化许多都是从设计模式演化而来的,大概可以参考的有:命令模式,工厂模式,抽象工厂模式等等,笔者根据个人经验,总结出三种插件化形式: ❈ 约定/注入插件化。 事件插件化。...插槽插件化。 ❈ 最后还有一个不算插件化实现方式,但效果比较优雅,姑且称为分形插件化吧。下面一一解释。...2.1.3 插槽插件化 这种插件化一般用在对 UI 元素的拓展。...笔者此处给出一种解决方案,供大家参考。另外要注意,这个方案随着考虑到的使用场景增多,是要不断调整变化的。...2.4 哪些场景可以插件化 最后梳理下插件化适用场景,笔者根据有限的经验列出一下一些场景。
文章目录 一、插件化的由来 二、插件化要解决的问题 1、动态加载APK 2、资源加载 3、代码加载 一、插件化的由来 一个dex文件方法数限制: 因为现在的一个app中功能模块的解耦和运维团队的分离越来越厉害...因此产生了插件化技术。 二、插件化要解决的问题 1、动态加载APK 有一个宿主程序,他会到我们指定的sd卡中加载apk, 会通过代理的activity去执行。
在 Activity生命周期管理 以及 广播的管理 中我们详细探讨了Android系统中的Activity、BroadcastReceiver组件的工作原理以及它们的插件化方案,相信读者已经对Android...与Activity, BroadcastReceiver相比,Service组件的不同点在哪里呢?我们能否用与之相同的方式实现Service的插件化?...,那么自然而然,我们可以手动控制它的生命周期,就像我们对于BroadcastReceiver的插件化方式一样!...迄今为止,我们讲述了了Activity、BroadcastReceiver以及Service的插件化方式,不知读者思索过没有,实现插件化的关键点在哪里?...对于Activity组件,由于他的生命周期受用户交互影响,只有系统本身才能对这种交互有全局掌控力,因此它的插件化方式是Hook AMS,但是生命周期依然交由系统管理;而Service以及BroadcastReceiver
目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案;那么对于ContentProvider...但是,如果回想一下Activity等组件的插件化方式,在涉及到「共享」这个问题上,一直没有较好的解决方案: 系统中的第三方App无法启动插件中带有特定IntentFilter的Activity,因为系统压根儿感受不到插件中这个真正的...既然希望把插件的ContentProvider共享给整个系统,让第三方的App都能获取到我们插件共享的数据,我们必须解决这个问题;下文将会围绕这个目标展开,完成ContentProvider的插件化,并且顺带给出上述问题的解决方案...这个问题的解决方案也很容易,我们可以制定一个「插件查询协议」来实现。...小结 本文我们通过「代理分发技术」以及「插件查询协议」完成了ContentProvider组件的插件化,并且给出了对「插件共享组件」的问题的一般解决方案。
领取专属 10元无门槛券
手把手带您无忧上云