Android插件化框架

news/2025/10/22 11:31:57/文章来源:https://www.cnblogs.com/kaimingkai/p/19157567

https://chat.deepseek.com/share/w6duumv7aglpslahak

Android插件化框架Shadow深度解析

1. 什么是Android插件化?

1.1 基本概念

Android插件化是一种技术,允许一个已安装的APP(称为宿主)动态加载并运行另一个完整的APP(称为插件),而不需要安装这个插件APP。

1.2 为什么要使用插件化?

  • 模块化开发:将大型应用拆分为多个独立模块
  • 动态更新:修复bug或发布新功能无需重新安装整个应用
  • 减小包体积:用户按需下载功能模块
  • 快速迭代:不同团队可独立开发不同插件

1.3 Shadow框架简介

Shadow是腾讯开源的一个Android插件框架,其核心特点是:

  • 零反射、无Hack - 遵循Google规范
  • 全动态框架 - 框架自身也可动态更新
  • 功能完整 - 支持四大组件、Fragment等

2. 早期插件化框架:基于反射的Hack方案

2.1 核心矛盾

系统(ActivityManagerService)只认识和管理在AndroidManifest.xml中注册过的组件。插件组件没有注册,系统无法识别。

2.2 解决方案:欺骗系统

通过反射篡改系统内部对象,让系统误以为插件组件是宿主中已注册的组件。

2.2.1 关键技术点

1. 提前占坑

<!-- 在宿主Manifest中声明空壳Activity -->
<activity android:name=".StubActivity01" />
<activity android:name=".StubActivity02" />

......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)

完整教程:Python全栈(基础篇)——Day06:后端内容(定义函数+调用函数+实战演示+每日一题)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

【IEEE出版、中国科学院宁波材料所主办】第五届机械自动化与电子信息工程国际学术会议(MAEIE 2025)

IEEE出版、会议规模大,EI检索 第五届机械自动化与电子信息工程国际学术会议(MAEIE 2025) 2025 5th International Conference on Mechanical Automation and Electronic Information Engineering 在这里看会议官网详…

氛围灯动态屏保取色方案二

氛围灯动态屏保取色方案二hue查找:整体偏差不会很大,但是对于亮度较高存在误差,精准度不够 lab查找:整体一般,但是精准度较好,不过算法复杂,增加耗时 hue色相查找存在误差,在有限的256色中,匹配的规则需要调整…

完整教程:Oracle/MySQL/SqlServer/PostgreSQL等数据库的数据类型映射以及各版本数据类型情况说明

完整教程:Oracle/MySQL/SqlServer/PostgreSQL等数据库的数据类型映射以及各版本数据类型情况说明2025-10-22 11:20 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !i…

老弟第一次学 Redis,被坑惨了!小白可懂的保姆级 Redis 教程

这天,产品经理找到你:阿巴阿巴,用户吐槽咱们网站首页加载太慢,快优化!你是小阿巴,刚入职的程序员。 这天,产品经理找到你:阿巴阿巴,用户吐槽咱们网站首页加载太慢,快优化! 你打开监控一看,好家伙!每秒有…

中小企业如何低成本部署电话呼叫软件网页版?一步步教你做

对于许多中小企业而言,电话沟通依然是销售、客服、售后等场景中最直接、最高效的方式。但当业务量增长、员工分布分散后,传统电话模式的问题也随之暴露:号码分散难管理、通话费用高、数据无法留存、外呼行为缺乏监管…

别再手写过滤器!SpringCloud Gateway 内置30 个,少写 80% 重复代码

大家好,我是小富~ 我发现公司的网关项目里有很多的轮子,几乎每个人接手这个项目开发,都会自定义过滤器,导致有非常非常多的过滤器,修改其中一个,指不定就会影响其他的人功能,非常的恼火。 其实在 Spring Cloud…

PCB库文档处理工具

PCB库文档处理工具封装库文档图元清理工具

完整教程:如何更改 SQLserver 数据库存储的位置 想从C盘换到D盘

完整教程:如何更改 SQLserver 数据库存储的位置 想从C盘换到D盘pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

实用指南:Linux 如何创建和计数套接字

实用指南:Linux 如何创建和计数套接字pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

(web cad drawing)Web CAD SDK Integration Method

Preface We have created an online CAD project based on mxcad, which includes various CAD functions such as previewing, editing drawings, and operating the drawing database. After user integration, it s…

记一次 .NET 某药品缺陷高速检测系统 卡慢分析

一:背景 1. 讲故事 上个月有位朋友找到我,说他们公司的程序当内存达到一定阈值(2g+)之后,业务逻辑明显变慢导致下位机超时报警,想让我看下到底怎么回事,这种问题其实抓dump比较难搞,但朋友也说了有一个增长阈值,…

0254-CLAP-参数默认值

环境Time 2022-12-02 WSL-Ubuntu 22.04 CLAP 4.0.29前言 说明 参考:https://docs.rs/clap/latest/clap/index.html 目标 如果没有提供参数,使用默认值。 Cargo.toml [package] edition = "2021" name = &q…

得物火山引擎:Data Agent驱动财务管理智能升级

作为新一代品质生活购物社区,得物 App 以正品电商和品质生活社区作为两大核心服务,成立十年来,得物 App 始终致力于帮助用户得到美好生活,90后用户占比超9成,已成为年轻用户重要的品质生活购物平台。随着 AI 时代…

WPF/C#:使用Stylet中的IWindowManager用于显示等待窗体、对话框与消息框

前言 显示等待框意义 在创建WPF应用的时候,如果我们要执行一个耗时的操作,那么给用户显示一个等待窗体是很常见的需求,通过显示一个等待窗体让用户明白运行的这个软件并没有崩溃,能有效消除用户的焦虑与不确定性,…

2025年钢花钢管厂家最新行业资讯推荐,注浆钢管/超前小导钢管/袖阀钢管/地质钢管/管棚钢管/岩心钢管/基建与矿业升级驱动需求,高品质钢管如何选?最新实力厂商推荐榜发布

随着国家在基础设施建设、能源勘探及矿山开发等领域的持续投入,2025年市场对高品质、高规格钢管的需求预计将进一步提升。尤其在隧道支护、地质加固、精密设备制造等场景中,钢管的材质、精度与耐久性直接关系到工程安…

训练常用

1 利用 Screen 保持 VSCode 连接远程任务持续运行 1.1 远程连接 在 Linux 上使用 screen 是一种保持进程持续运行的便捷方式,即使用户断开 SSH 连接,进程也不会中断。连接远程服务器 首先使用 VSCode 或者 PyCharm 连…

《Vuejs设计与实现》第 18 章(同构渲染)(上) - 详解

《Vuejs设计与实现》第 18 章(同构渲染)(上) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

配置git

1 从项目中去掉现有的 Git 信息,并重新建立新的 Git 仓库 删除原有的 Git 信息:打开命令行工具,进入项目所在的目录。 执行以下命令以删除 .git 文件夹,这将移除所有的 Git 版本控制信息:对于 Linux 和 macOS: rm…

0253-CLAP-统计参数出现次数

环境Time 2022-12-02 WSL-Ubuntu 22.04 CLAP 4.0.29前言 说明 参考:https://docs.rs/clap/latest/clap/index.html 目标 统计参数出现的次数。 Cargo.toml [package] edition = "2021" name = "game&q…