Android面试题——掘金-三方框架之Shadow(5.3)
一 概述
1 | Android 三方框架相关面试题:Shadow 插件化框架 |
二 面试题解答(仅供参考)
2.1 什么是 Shadow?它的作用是什么?
1 | 1.概念 |
2.2 Shadow 与传统插件化框架(如 RePlugin、Small、DroidPlugin)有什么不同?
特性 | Shadow | RePlugin / DroidPlugin 等 |
---|---|---|
插件资源访问 | 支持原生资源访问 | 需特殊资源 ID 适配处理 |
插件 Activity 启动 | 完整支持 startActivity |
需要通过代理或桥接 |
宿主无侵入 | ✅ 是 | ❌ 需要改造宿主 Manifest/源码 |
插件进程/生命周期 | 完整隔离,真实 Activity 生命周期 | 有些通过代理 Activity 实现 |
插件打包 | 通过 Gradle 插件统一化 | 大多数需手动配置 |
2.3 Shadow 的整体架构是什么?
1 | Shadow 的架构主要包括: |
2.4 Shadow 的 Activity 是如何启动的?
1 | Shadow 使用 “壳 Activity + 插件 Activity 替换” 的机制。 |
2.5 Shadow 的 ClassLoader 是怎么处理插件隔离的?
1 | Shadow 使用自定义的 PluginClassLoader: |
2.6 Shadow 如何加载插件资源?如何解决 Resource ID 冲突?
1 | -插件 APK 是 独立构建 的,资源不依赖宿主; |
2.7 Shadow 如何支持插件的 Service / BroadcastReceiver / ContentProvider?
1 | -Service:通过 hook AMS,拦截 startService,映射到插件; |
2.8 Shadow 的插件如何打包与构建?
1 | 使用官方提供的 Gradle 插件 shadow-plugin,步骤如下: |
2.9 Shadow 是否支持插件热更新?如何实现?
1 | Shadow 插件在运行时由宿主动态加载,因此: |
2.10 使用 Shadow 插件化有哪些限制或注意点?
1 | -插件中不可直接引用宿主类或资源; |
2.11 Shadow 的 Activity 是如何管理生命周期的?
1 | 通过宿主壳 Activity 转发生命周期事件: |
2.12 Shadow 和模块化(Module)、组件化(ARouter)有什么区别?
特性 | 模块化 / ARouter | Shadow 插件化 |
---|---|---|
编译时依赖 | 是 | 否 |
是否独立 | 否(最终打成主包) | 是(单独 APK) |
是否可更新 | 否 | ✅ 可热更新 |
生命周期隔离 | 否 | ✅ 是 |
使用场景 | 大型工程分模块管理 | 插件市场、业务解耦、热更新等 |
2.13 总结
维度 | 说明 |
---|---|
插件隔离 | 类、资源完全隔离 |
插件加载 | 动态加载 dex 和资源 |
生命周期 | 插件与宿主同步管理 |
插件通信 | 通过桥接或远程接口 |
热更新支持 | ✅ 支持 |
构建方式 | 独立 APK + Gradle 插件 |
三 参考
- 掘金—知识库的大纲