feat: 支持插件独立任务栈与前台Service托管 插件Activity声明非standard的launchMode或非默认taskAffinity时,原有容器映射无法让其 运行在独立任务栈中;插件前台Service也缺少由宿主真实Service承载的通道。 独立任务栈: manifest-parser解析并生成插件Activity的launchMode、taskAffinity ComponentManager新增getContainerActivityPool()/getContainerActivityProfile(), 由框架按launchMode、profile和taskAffinity分组分配、复用和回收宿主容器Activity 容器在插件Activity首次启动时获得租约,finish销毁后释放;每次分配生成新租约ID, 拒绝旧任务栈迟到的onNewIntent 前台Service: manifest-parser解析插件Service的foregroundServiceType 新增宿主侧容器PluginContainerService及委托通道,ComponentManager新增 getContainerServicePool()/onBindContainerService() 多个插件Service可共享同一容器,分别转发生命周期、startForeground、stopForeground 和停止请求;全部插件Service停止后容器才停止 容器onStartCommand回调前收到的stop请求延迟到插件onStartCommand返回后执行, 避免startForegroundService超时 兼容性: 宿主未提供容器池时保持原有行为 保留旧版Manifest生成代码所需的兼容构造方法 测试: 测试宿主接入独立任务栈容器池和PluginContainerService 新增IndependentTaskTest、PluginForegroundServiceTest自动化用例 测试插件增加第三方SDK前台Service和独立任务栈的手动验证页面 CI: 代码格式化检查使用的Android Studio从2021.1.1升级到2026.1.1 Patch 2, 新旧版本格式化规则不一致;同时按新版规则重新格式化受影响的已有代码
feat: 支持插件独立任务栈与前台Service托管
插件Activity声明非standard的launchMode或非默认taskAffinity时,原有容器映射无法让其 运行在独立任务栈中;插件前台Service也缺少由宿主真实Service承载的通道。
独立任务栈:
前台Service:
兼容性:
测试:
CI:
Shadow是一个腾讯自主研发的Android插件框架,经过线上亿级用户量检验。 Shadow不仅开源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。
与市面上其他插件框架相比,Shadow主要具有以下特点:
建议直接用最新的稳定版本Android Studio打开工程。目前项目已适配Android Studio Arctic Fox | 2020.3.1, 低版本的Android Studio可能因为Gradle版本过高而无法正常打开项目。
Android Studio Arctic Fox | 2020.3.1
然后在IDE中选择sample-app或sample-host模块直接运行,分别体验同一份代码在正常安装情况下和插件情况下的运行情况。
sample-app
sample-host
Shadow的所有代码都位于projects目录下的3个目录,分别是:
projects
sdk
test
sample
其中sample应该是大家体验Shadow的最佳环境。 详见sample目录中的README介绍。
Shadow项目有较为完善的自动化测试,因此最新代码对外部环境的版本兼容性可以参考自动化测试的配置。
以我们多年的插件环境下业务开发经验,插件框架是不可能一步到位实现完美的。 因此,我们相信大部分业务在接入时都是需要一定的二次开发工作。 Shadow现有的代码满足的是我们自己的业务现在的需求。得益于全动态的设计, 插件框架和插件本身都是动态发布的,插件包里既有插件代码也有插件框架代码, 所以可以根据新版本插件的需要同时开发插件框架。
例如,ShadowActivity没有实现全所有Activity方法,你写的测试代码可能用到了, 就会出现Method Not Found错误,只需要在ShadowActivity中实现对应方法就可以了。 大部分方法的实现都只是需要简单的转调就能工作正常。
如果遇到不会实现的功能,可以提Issue。最好附上测试代码。
详见CONTRIBUTING.md
Tencent Shadow采用BSD 3-Clause License,详见LICENSE。
BSD 3-Clause License
详见PRIVACY.md
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
Shadow
介绍
Shadow是一个腾讯自主研发的Android插件框架,经过线上亿级用户量检验。 Shadow不仅开源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。
与市面上其他插件框架相比,Shadow主要具有以下特点:
支持特性
编译与开发环境
环境准备
建议直接用最新的稳定版本Android Studio打开工程。目前项目已适配
Android Studio Arctic Fox | 2020.3.1, 低版本的Android Studio可能因为Gradle版本过高而无法正常打开项目。然后在IDE中选择
sample-app或sample-host模块直接运行,分别体验同一份代码在正常安装情况下和插件情况下的运行情况。Shadow的所有代码都位于
projects目录下的3个目录,分别是:sdk包含SDK的所有代码test包含SDK的自动化测试代码sample包含演示代码其中
sample应该是大家体验Shadow的最佳环境。 详见sample目录中的README介绍。兼容性
Shadow项目有较为完善的自动化测试,因此最新代码对外部环境的版本兼容性可以参考自动化测试的配置。
自己写的测试代码出错?
以我们多年的插件环境下业务开发经验,插件框架是不可能一步到位实现完美的。 因此,我们相信大部分业务在接入时都是需要一定的二次开发工作。 Shadow现有的代码满足的是我们自己的业务现在的需求。得益于全动态的设计, 插件框架和插件本身都是动态发布的,插件包里既有插件代码也有插件框架代码, 所以可以根据新版本插件的需要同时开发插件框架。
例如,ShadowActivity没有实现全所有Activity方法,你写的测试代码可能用到了, 就会出现Method Not Found错误,只需要在ShadowActivity中实现对应方法就可以了。 大部分方法的实现都只是需要简单的转调就能工作正常。
如果遇到不会实现的功能,可以提Issue。最好附上测试代码。
后续开发
贡献代码
详见CONTRIBUTING.md
许可协议
Tencent Shadow采用
BSD 3-Clause License,详见LICENSE。个人信息保护规则声明
详见PRIVACY.md