1.宿主App加载插件中的类 2.最简单的插件化方案就是在宿主的androidmanifest.xml中申明插件中的四大组件 把插件dex合并到宿主dex中,那么宿主app对应的classloader...的插件化方案 1)为插件创建一个LoadedApk对象,并把它事先放到mPackages缓存中。...// 替换 RefInvoke.setFieldObject(pathListObj, "dexElements", newElements); } } 解决插件化...Activity启动模式的问题,使用的是占位Activity的思想,即事先为这3中启动模式创建很多的StubActivity,占位activity是什么启动模式,对应的插件activity就是什么启动模式...null; //系统原始的ClassLoader public static void init(Application application) { //初始化一些成员变量和加载已安装的插件
前言 四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三种实现方式,分别是反射实现、接口实现和Hook技术实现。...反射实现会对性能有所影响,主流的插件化框架没有采用此方式,关于接口实现可以阅读dynamic-load-apk的源码,这里不做介绍,目前Hook技术实现是主流,因此本篇文章主要介绍Hook技术实现。...在讲到这两个解决方案前,我们需要从整体上了解Activity的启动流程。...接着在步骤2之后用插件Activity替换占坑的Activity,接下来根据这个解决方案我们来实践一下。...同时这一节使我们更好的理解了Activity的启动过程。更多的Android插件化原理请查看即将要出版的《Android进阶之光》续作。
这个cl其实就是插件的cl,也就是dexcl。我们在和AMS交互的时候可以传入对应的cl,之后创建再取出正确的cl。...注意点: 由于Activity默认是Standard模式,所以宿主中的一个Activity可以对应插件中的多个标准模式的Activity。每次启动都会创建一个实例。...commentName为key,真实的Activity实例为value(这个模拟的就是Activity栈);一个是当前APK中所有的Activity集合(是否可以通过类名找到对应的Activity信息)...越早越好 流程: 1.先遍历第二个集合中看插件中是否有对应Activity的信息。...实例和调用Activity方法进行额外的逻辑处理 2.首先看下已经启动的集合中Activity的数量,launchmode是针对多Activity才有用,如果栈中只有一个Activity那么launchmode
在之前的文章中,我们有讲过Android插件化加载资源。其核心思想是,通过仿照安装的流程,自行创建Resources,然后通过ResId去加载相应的资源。...同样,在启动插件Activity时,我们的思路也类似。通过仿照Activity的启动过程,我们自行创建Activity,“偷梁换柱”,交给系统去启动。...= null) { // 用插件的ClassLoader启动插件Activity Activity activity = mBase.newActivity...获取插件的Resources的方法参考Android插件化——资源加载 在performLaunchActivity中,完成了newActivity后,在onCreate之前,我们会调用callActivityOnCreate...插件的Context 给 Activity 赋予 插件的Application 给 ContextThemeWrapper 赋予 插件的Context 最后输入了activity的屏幕旋转信息。
,今天就带大家手把手实现一个插件化Activity框架,希望对你有所帮助~ 插件化概念 插件化是一种动态加载四大组件的技术。...插件化业务价值 插件化无非是为了解决类加载和资源加载的问题,资源加载一般是通过反射 AssertManager , 按照类加载划分,插件化一般分为静态代理和 Hook 的方式,使用插件化一般为了解决应用新版本覆盖慢的问题...来加载插件中的资源 插件化遇到的问题 找到的 Activity 不在插件包里面 我们真正打开的确实一个在插件包中定义的 Activity,这个 Activity 需要的信息在插件包中的,而不是宿主的。...解决方案 插件 Activity 也同时重写了 attachBaseContext 方法。...解决方案 宿主和所有插件都依赖 leakcanary 即可。 总结 本文主要是根据我自身实际投产的 插件组件化 实践,分享一些动态加载 SDK插件 时需要考虑的问题。
【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...) 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程...| 静态代理 ) 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 ) 【Android 插件化】Hook...插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 ) 【Android 插件化】Hook 插件化框架 ( hook 插件化原理...插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 反射获取
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) ---- 文章目录 Android 插件化系列文章目录 一、加载插件包 dex 的类加载器 二、生命周期回调方法...三、代理 Activity 组件 四、博客资源 参考 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 中给出的实现思路 , 逐步实现 “ 插桩式 “ 插件化框架 ; 在
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...) 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程...| 静态代理 ) 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 ) ---- 文章目录 Android...二、Activity 进程相关源码 1、Instrumentation 源码分析 三、博客资源 ---- 前言 上一篇博客 【Android 插件化】Hook 插件化框架 ( Hook Activity
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) ---- 文章目录 Android 插件化系列文章目录 前言 一、" 宿主 " 模块启动 " 插件 "...Activity 全类名 , 使用 从 PluginManager 中获取的 类加载器 , 使用 反射 加载该全类名对应的 Activity 类 , 并使用反射初始化该类 ; /** * 该 Activity
【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...) 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程...| 静态代理 ) 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 ) 【Android 插件化】Hook...插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 二 | AMS 进程相关源码 | 主进程相关源码 ) 【Android 插件化】Hook 插件化框架 ( hook 插件化原理...插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 ) 【Android 插件化】Hook 插件化框架 ( 从 Hook
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 )...【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) 【Android 插件化】Hook 插件化框架 ( Hook 技术 | 代理模式 | 静态代理 | 动态代理...) 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程
【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...| 静态代理 ) 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 ) 【Android 插件化】Hook...插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 反射获取...| Hook 点选择 | 资源冲突解决方案 ) 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 ) ----...| Hook 点选择 | 资源冲突解决方案 ) 中 , 分析了加载插件资源 , 并替换 Activity 中 Resources 成员可用的 Hook 点 , 本篇博客开始实现插件资源的加载与替换 ;
概述 Android插件化架构,目前第三方的框架比较多,早几年自己用的是DL框架,这个框架的源码比较简单主要用的是静态代理。...如果我们自己要去写一个插件化架构框架那要解决的问题会分为几个方面,类的加载,资源和布局的加载,广播的管理方式,Activity的加载和生命周期管理,Service的插件化,ContentProvider...的插件化等等等等,反正加载一个没有运行的app到主程序,需要解决的问题基本就这么多,如果能够一一解决那么就可以实现插件化了。 ...那么结合动态代码设计模式以及Activity的启动流程,我们就可以尝试去拦截Activity的启动流程,让没有在AndroidMainfest.xml中注册的Activity也能启动并且不报错,这样我们就算是跨出了插件化架构的第一步了...相关视频 一次让你彻底掌握Android插件化,征服面试!
android插件化在9.0上插件activity的theme失效问题(VirtualApk) 在使用VirtualApk的时候,发现在android 9.0上,插件中的Activity配置的theme...{ ContextImpl appContext = createBaseContextForActivity(r); Activity activity = null; try...消息时,virtualApk会先处理,获取到对应的ActivityClientRecord,然后修改activityInfo中的theme为插件的theme。...那为什么在9.0后就不行了呢,我们看下9.0这部分的源码 呵,好家伙,根本就没有LAUNCH_ACTIVITY这个定义了,所以hook失效,根本就没有设置插件的theme 那系统是怎么调用的handleLaunchActivity...getClassLoader()); if (PluginUtil.isIntentFromPlugin(intent)) { //获取插件主题
上周末,滴滴与360都开源了各自的插件化框架,VirtualAPK与RePlugin,作为一个插件化方面的狂热研究者,在周末就迫不及待的下载了Virtualapk框架来进行研究,本篇博客带来的是VirtualAPK...,这个硬性要求很大程度上限制了插件系统的发挥:因为插件的Activity必定不会在宿主程序中进行声明 如何绕过这个限制呢?...启动插件中声明的Activity 通过上面的描述,相信你已经大致了解了Activity的启动过程,之前我们说过,启动插件中的Activity会遇到的问题是必须在清单文件中进行声明,我们也说了解决的思路是在...可以看见,接下来就是调用插件Activity的onCreate方法了,就完了加载插件Activity的过程 你可能会问通过上面的方式启动的插件TargetActivity就具有生命周期了吗?...Activity里面有一个成员变量mToken代表的就是它,token可以唯一地标识一个Activity对象,它在Activity的attach方法里面初始化; 在AMS处理Activity的任务栈的时候
【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources...) 【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程...| 静态代理 ) 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 ) 【Android 插件化】Hook...插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 反射获取...| Hook 点选择 | 资源冲突解决方案 ) 【Android 插件化】Hook 插件化框架 ( 使用 Hook 方式替换插件 Activity 的 mResources 成员变量 ) 【Android
Instrymentation.checkStartActivityResult 要实现插件Activity的启动需要解决以下问题: 1、插件的Activity需要在宿主的AndroidManifest.xml...,ClassLoader加载的实际上是插件的Activity对象。...转换Intent dispatchStudActivity完成插件Activity和宿主Activity的转换。 ?...callActivityOnCreate newActivity加载完插件Activity会调用callActivityOnCreate,但此时插件Activity对象的resource资源、context...因此不影响Activity的生命周期。 至此,就解决了启动插件Activity的两个问题。 以上就是本文的全部内容,希望对大家的学习有所帮助。
我按照教程打开settings-plugins,搜索actiBPM搜索不到, 于是我就去下载插件,然后再安装,具体步骤如下: 下载插件: 到http://plugins.jetbrains.com/,搜索需要的插件...作者:彼岸舞 时间:2020\06\27 内容关于:activity 本文来源于网络,只做技术分享,一概不负任何责任
领取专属 10元无门槛券
手把手带您无忧上云