[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4209":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":16,"starSnapshotCount":16,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},4209,"Shadow","Tencent\u002FShadow","Tencent","零反射全动态Android插件框架","",null,"Java",7769,1347,157,66,0,6,20,70.39,"BSD 3-Clause \"New\" or \"Revised\" License",false,"master",true,[25],"android","2026-06-12 04:00:21","# Shadow\n\n![Android CI](https:\u002F\u002Fgithub.com\u002FTencent\u002FShadow\u002Fworkflows\u002FAndroid%20CI\u002Fbadge.svg?event=push)\n[![PRs Welcome](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg?style=flat-square)](http:\u002F\u002Fmakeapullrequest.com)\n\n## 介绍\nShadow是一个腾讯自主研发的Android插件框架，经过线上亿级用户量检验。\nShadow不仅开源分享了插件技术的关键代码，还完整的分享了上线部署所需要的所有设计。\n\n与市面上其他插件框架相比，Shadow主要具有以下特点：\n\n* **复用独立安装App的源码**：插件App的源码原本就是可以正常安装运行的。\n* **零反射无Hack实现插件技术**：从理论上就已经确定无需对任何系统做兼容开发，更无任何隐藏API调用，和Google限制非公开SDK接口访问的策略完全不冲突。\n* **全动态插件框架**：一次性实现完美的插件框架很难，但Shadow将这些实现全部动态化起来，使插件框架的代码成为了插件的一部分。插件的迭代不再受宿主打包了旧版本插件框架所限制。\n* **宿主增量极小**：得益于全动态实现，真正合入宿主程序的代码量极小（15KB，160方法数左右）。\n* **Kotlin实现**：core.loader，core.transform核心代码完全用Kotlin实现，代码简洁易维护。\n\n### 支持特性\n* 四大组件\n* Fragment（代码添加和Xml添加）\n* DataBinding（无需特别支持，但已验证可正常工作）\n* 跨进程使用插件Service\n* 自定义Theme\n* 插件访问宿主类\n* So加载\n* 分段加载插件（多Apk分别加载或多Apk以此依赖加载）\n* 一个Activity中加载多个Apk中的View\n* 等等……\n\n## 编译与开发环境\n\n### 环境准备\n建议直接用最新的稳定版本Android Studio打开工程。目前项目已适配`Android Studio Arctic Fox | 2020.3.1`，\n低版本的Android Studio可能因为Gradle版本过高而无法正常打开项目。\n\n然后在IDE中选择`sample-app`或`sample-host`模块直接运行，分别体验同一份代码在正常安装情况下和插件情况下的运行情况。\n\n![选择sample-host直接运行](pics\u002Frun-sample-host-in-ide.png)\n\nShadow的所有代码都位于`projects`目录下的3个目录，分别是：\n\n* `sdk`包含SDK的所有代码\n* `test`包含SDK的自动化测试代码\n* `sample`包含演示代码\n\n其中`sample`应该是大家体验Shadow的最佳环境。\n详见`sample`目录中的[README](projects\u002Fsample\u002FREADME.md)介绍。\n\n### 兼容性\n\nShadow项目有较为完善的自动化测试，因此最新代码对外部环境的版本兼容性可以参考自动化测试的配置。\n\n* [pr-check.yml](.github\u002Fworkflows\u002Fpr-check.yml) 虚拟机自动化测试，包含Android测试机版本和编译环境JDK等版本。\n* [pr-check-gradle-plugin.yml](.github\u002Fworkflows\u002Fpr-check-gradle-plugin.yml) AGP兼容性测试。\n  其中指向的[test_JDK17.sh](projects\u002Ftest\u002Fgradle-plugin-agp-compat-test\u002Ftest_JDK17.sh)和\n  [test_JDK11.sh](projects\u002Ftest\u002Fgradle-plugin-agp-compat-test\u002Ftest_JDK11.sh)中定义了被测试的AGP版本。\n\n## 自己写的测试代码出错？\n\n以我们多年的插件环境下业务开发经验，插件框架是不可能一步到位实现完美的。\n因此，我们相信大部分业务在接入时都是需要一定的二次开发工作。\nShadow现有的代码满足的是我们自己的业务现在的需求。得益于全动态的设计，\n插件框架和插件本身都是动态发布的，插件包里既有插件代码也有插件框架代码，\n所以可以根据新版本插件的需要同时开发插件框架。\n\n例如，ShadowActivity没有实现全所有Activity方法，你写的测试代码可能用到了，\n就会出现Method Not Found错误，只需要在ShadowActivity中实现对应方法就可以了。\n大部分方法的实现都只是需要简单的转调就能工作正常。\n\n如果遇到不会实现的功能，可以提Issue。最好附上测试代码。\n\n## 后续开发\n* 原理与设计说明文档\n* 多插件支持的演示工程\n* 自动化测试用例补充\n* 开源包含下载能力的manager实现\n\n## 贡献代码\n\n详见[CONTRIBUTING.md](CONTRIBUTING.md)\n\n## 许可协议\n\nTencent Shadow采用`BSD 3-Clause License`，详见[LICENSE](LICENSE.txt)。\n\n## 个人信息保护规则声明\n\n详见[PRIVACY.md](PRIVACY.md)\n","Shadow是一个由腾讯自主研发的零反射全动态Android插件框架，经过亿级用户量的实际验证。其核心功能包括复用独立安装App的源码、采用无Hack技术实现插件化、支持四大组件及Fragment等特性，并且通过全动态设计使得宿主程序仅需少量增量即可运行最新版本的插件代码（约15KB）。此外，该框架使用Kotlin语言编写核心部分，确保了良好的可维护性。Shadow适用于需要频繁更新应用功能而不希望频繁发布完整新版本的应用场景，特别适合对性能和安全性有较高要求的大型移动应用开发项目。",2,"2026-06-11 02:59:01","top_language"]