插件实践方案其实插件你就把它当一个组件来用就好。用起来就是异步组件加载。 异步组件加载,其实更好办:在Suspense里面 渲染异步组件或者 是 通过state 渲染出 加载的虚拟 组件vue异步组件加载<template>
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化 】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources 资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) 文章目录 Android 插件化系列文章目录 一、组件化与插件化 二、插件化示例 三、插件化标准引入 机制 , 动态部署其插件 apk ; 这类软件第一次打开时 , 需要下载该模块的 插件 apk , 并安装 , 此时会卡顿以下 , 之后可以流畅访问 ; 三、插件化标准引入 ---- 插件化 中 ,
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化 】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 ) Android 10 版本 ; ---- 一、hook 插件化原理 ---- 使用 Hook 实现的插件化原理如下 : 通过以下 3 个步骤实现插件化 ; 1. 系统 ; ② 使用 hook 技术 , 加载插件包 apk 中的 Activity ③ 实现跳转的 Activity ( 插件包中的 ) 3. 系统 * ② 使用 hook 技术 , 加载插件包 apk 中的 Activity * ③ 实现跳转的 Activity ( 插件包中的 ) * 3.
框架简介 : https://www.infoq.cn/article/ctrip-android-dynamic-loading/
前言 四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三种实现方式,分别是反射实现、接口实现和Hook技术实现。 反射实现会对性能有所影响,主流的插件化框架没有采用此方式,关于接口实现可以阅读dynamic-load-apk的源码,这里不做介绍,目前Hook技术实现是主流,因此本篇文章主要介绍Hook技术实现。 ActivityThread启动Activity的过程,如图3所示。 ? 为了更好的讲解启动插件Activity的原理,本小节省略了插件Activity的加载逻辑,直接创建一个TargetActivity来代表已经加载进来的插件Activity。 更多的Android插件化原理请查看即将要出版的《Android进阶之光》续作。
文章目录 一、插件化技术弊端 二、恶意插件化程序的解决方向 三、常用的插件化虚拟引擎 一、插件化技术弊端 ---- 在之前的 Android 应用中 , 部分黑客将应用破解 , 植入自己的恶意代码 , , 使用自动化脚本 , 一晚上甚至可以封装数量巨大的恶意应用 ; 目前的 Android 生态中 , 存在着大量的该类使用插件化技术进行 ; 据统计 , 应用市场中 , 插件化应用中 , 恶意插件化应用 是 正常使用插件化技术应用的 数倍 ; 针对上述问题 , 需要使用一些技术识别 恶意 插件化应用 , 并删除此类应用 ; 二、恶意插件化程序的解决方向 ---- 首先 , 要先识别出使用了插件化技术的应用 ; 插件化应用有相同的特点 : 使用了 插件化 技术 的应用 , 都有相同的特点 , 当前的插件化基本都是基于 Hook 的插件化技术 , 这样可以零侵入代码 , 开发的插件 APK 与普通 APK , 一般不经过用户同意秘密加载插件 ( 感觉有些大厂的插件化也是偷摸加载的 , 插件化对用户透明 ) , 分析出恶意插件的非法加载插件的指纹特征 , 与正常使用插件化技术的应用进行区分 ; 检测恶意插件化应用
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化 】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 ) 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 ) 【Android 插件化】Hook 插件化框架 ( 插件包资源加载 ) ---- 文章目录 Android 插件化系列文章目录 前言 一、加载插件包资源文件 1、反射 AssetManager 类并创建实例对象 2、反射 AssetManager 的 addAssetPath 方法并调用 3、创建 Resources 二、自定义 InvocationTargetException e) { e.printStackTrace(); return null; } } } 3、
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 资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) ---- 文章目录 Android 插件化系列文章目录 一、" 插件化 " 中的 dex 文件 二、类加载器分析 三、获取类加载器 四、双亲委派机制 一、" 插件化 " 中的 dex 文件 ---- 现在的大型 Android 项目 , 基本都是 组件化 + 插件化 开发 , 项目架构上都是 组件化 的框架 ,
2.1 插件化分类 插件化许多都是从设计模式演化而来的,大概可以参考的有:命令模式,工厂模式,抽象工厂模式等等,笔者根据个人经验,总结出三种插件化形式: ❈ 约定/注入插件化。 事件插件化。 插槽插件化。 ❈ 最后还有一个不算插件化实现方式,但效果比较优雅,姑且称为分形插件化吧。下面一一解释。 2.1.3 插槽插件化 这种插件化一般用在对 UI 元素的拓展。 2.4 哪些场景可以插件化 最后梳理下插件化适用场景,笔者根据有限的经验列出一下一些场景。 3 总结 现在还没有找到对插件化系统化思考的文章,所以这一篇算是抛砖引玉,大家一定有更多的框架开发心得值得分享。
文章目录 一、插件化的由来 二、插件化要解决的问题 1、动态加载APK 2、资源加载 3、代码加载 一、插件化的由来 一个dex文件方法数限制: 因为现在的一个app中功能模块的解耦和运维团队的分离越来越厉害 因此产生了插件化技术。 二、插件化要解决的问题 1、动态加载APK 有一个宿主程序,他会到我们指定的sd卡中加载apk, 会通过代理的activity去执行。 3、代码加载 类加载机制, android中的两个类加载器: DexClassLoader可以从jar文件中加载字节码的类加载器,主要用于类加载和代码的热更新; PathClassLoader 只能加载文件目录中的
1.首先安装插件 菜单的preference->packages control,然后输入install .. 回车,再输入HTML/CSS/JS prettify 再回车,重启后就可以了。
Framework和插件化技术有了一定的了解;本文将探讨Android四大组件之一——Service组件的插件化方式。 我们能否用与之相同的方式实现Service的插件化?如果不行,它们的差别在哪里,应该如何实现Service的插件化? Service的插件化思路 现在我们已经明白了Service组件的工作原理,可对如何实现Service的插件化依然是一头雾水。 Service组件的插件化吗? 不论是借尸还魂还是女娲造人,对这些组件的插件化终归结底是要赋予组件“生命”。 插件化系列的文章有整整一个月没有更新了,非常抱歉!
Framework和插件化技术有了一定的了解;本文将探讨Android四大组件之一——Service组件的插件化方式。 我们能否用与之相同的方式实现Service的插件化?如果不行,它们的差别在哪里,应该如何实现Service的插件化? Service的插件化思路 现在我们已经明白了Service组件的工作原理,可对如何实现Service的插件化依然是一头雾水。 Service组件的插件化吗? 不论是借尸还魂还是女娲造人,对这些组件的插件化终归结底是要赋予组件“生命”。 插件化系列的文章有整整一个月没有更新了,非常抱歉!
应该如何实现它的插件化? 的插件化,这一点特别重要。 如果能让插件支持这些操作,不就支持了插件化么? 我个人觉得,如果只是希望插件化,那么是否支持ContentProvider无伤大雅,但是,如果希望实现虚拟化或者说容器技术,所有组件是必须支持插件化的。 ——推翻——改进的整个过程完全展现了出来,Android的插件化已经到达了百花齐放的阶段,插件化之路也不只有一条,但是万变不离其宗,希望我的分析和思考对各位读者理解甚至创造插件化方案带来帮助。
Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化 】插件化原理 ( 类加载器 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 原理与实现思路 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 类加载器创建 | 资源加载 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources 资源 ) 【Android 插件化】“ 插桩式 “ 插件化框架 ( 运行应用 | 代码整理 ) ---- 文章目录 Android 插件化系列文章目录 前言 一、" 宿主 " 模块启动 " 插件 " 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文的使用 ) 中对注入的上下文进行了相关代理操作 , 插件包中的界面组件 PluginActivity 凡是涉及上下文的操作 , 都统一委托给注入的上下文来完成
文章目录 一、VAHunt 检测插件引擎具体细节 一、VAHunt 检测插件引擎具体细节 ---- 上图的执行顺序是 ⑤ -> ④ -> ③ -> ② -> ① ; 存在 2 个 Intent 对象 , StubIntent 是 “桩” 组件对应的 Intent 对象 , TargetIntent 是插件包中的 Intent 对象 ; StubIntent 对应的组件需要欺骗 AMS , 因此该组件一定在 中发现启动的组件 StubIntent 类型 来自内部封装的 TargetIntent 中 , 调用 setType / setClassName ( setComponent ) 设置启动的组件是插件组件 ; 一旦发现了上述模式 , 就直接根据执行路径 , 反向找到 ⑤ 中在 AndroidManifest.xml 中注册的组件信息 ; 插件组件可以以不同的方式存储 , 字符串 , 对象 , 特殊标识 一直找到最终设置的组件类型 ; 匹配 " 桩 " 组件 : 获取到 " 桩 " 组件 , 与 AndroidManifest.xml 清单文件中的组件进行对比 , 如果查到了相应的组件 , 则可以直接判定该应用是插件化应用
这个DalvikVM针对手机程序/CPU做过最佳化,可以同样执行许多VM而不会占用太多的资源。 它可以将资源文件编译成二级制文件,尽管你可能没有直接使用过aapt工具,但是build scripts 和IDE插件会使用这个工具打包APK文件构成Android应用程序 (二)aapt打包流程 3、打包流程中最后一步,为什么要对齐? 对齐是为了加快资源的访问速度。 有点类似于资源数组化,数组的访问速度当然比链表块 4、Android是怎么通过R文件找到真正的资源文件? aapt工具对每个资源文件都生成了唯一的ID,这些ID保存在R.java文件中。 android.os.Parcelable{ public static final android.os.Parcelable$Creator *; } # 保留Serializable 序列化的类不被混淆
本博客主要从以下几个方面对插件化进行解析: Ø 为什么会提出插件化? Ø 插件化概述 Ø 插件化例子 1. 为什么会提出插件化? 目前来说,结合插件包的格式来说插件的方式有三种: 1,apk安装, 2,apk不安装, 3,dex包. 三种方式其实主要是解决两个方面的问题: 1,加载插件中的类, 2,加载插件中的资源. Ø 插件化的优缺点 插件化的优点主要有以下几个方面: 1) 模块解耦,应用程序扩展性强 2) 解除单个dex函数不能超过 65535的限制 3) 动态升级,下载更新节省流量 4 ) 高效开发(编译速度更快) Ø 插件化的缺点: 1) 增加了主应用程序的逻辑难度 2) 技术有难度,目前一些成熟的框架都是闭源的 3. 插件化例子 在介绍完插件化的概念和优缺点之后,我们就先一个小的案例,来帮助大家更好的理解插件的原理是什么样的。
研发背景 安卓集成react-native加载多个插件bundle包,由于公司项目业务需求,将项目进行架构分为主app和业务插件。 而与网上的搜到的情况不同,app的所有代码都是rn开发,要求插件包能够在app不升级上架的情况下,能够正常的加载不同的插件业务包。这样一来,网上的拆分包打包加载无法实现项目效果。 开发过程 1、打包 通过命令行分别将主app代码和插件业务代码进行打包。 注意:插件业务代码打包生成的bundle包和资源目录要放在同级目录下使用。 2、插件包的加载 安卓原生加载rn的bundle包有两种方式。 3、安卓原生代码实现 先创建一个application类,然后实现主app的ReactNativeHost,再创建一个接口,用来提供加载插件的ReactNativeHost方法供外部其他页面调用,具体实现代码如下